Python-反射

其实,反射就是通过字符串的形式,导入模块;通过字符串的形式,去模块寻找指定函数,并执行。利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/usr/bin/python3

from functools import wraps

def get_permissions():
    return {'root'}


class Require:
    def __init__(self, *permissions):
        print(permissions)
        self.permissions = set(permissions)

    def check(self):
        if len(self.permissions.intersection(get_permissions())) <= 0:
            raise PermissionError('Permission denied')

    def __call__(self, fn):
        @wraps(fn)
        def wrap(*args, **kwargs):
            self.check()
            return fn(*args, **kwargs)
        return wrap

    def __enter__(self):
        self.check()

    def __exit__(self, exc_type, exc_val, exc_tb):
        pass


@Require('root', 'admin')
def rebootIt():
    print('reboot it')

rebootIt()