关于类装饰器的一些代码

def Singleton(cls):
    _instance = {}

    def _singleton(*args, **kargs):
        if cls not in _instance:
            _instance[cls] = cls(*args, **kargs)
        return _instance[cls]

    return _singleton


@Singleton  # Singleton(A)
class A(object):

    def __init__(self, x=0):
        self.x = x


a1 = A(2)
a2 = A(3)
print(id(a1), id(a2))
class Warp:
    def __init__(self, func):
        print('222')
        self.func = func

    def __call__(self, *args, **kwargs):
        print('执行前')
        ret = self.func()
        print('执行后')
        return ret


@Warp  # f = Warp(f)
def f():
    print('执行')
    return '返回值'


f()  # Warp(f)()
class Foo(object):
    def __init__(self):
        pass

    def __call__(self, func):
        def _call(*args, **kw):
            print('class decorator runing')
            return func(*args, **kw)

        return _call


class Bar(object):
    @Foo()
    def bar(self, test, ids):
        print('bar')


Bar().bar('aa', 'ids')

你可能感兴趣的:(关于类装饰器的一些代码)