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')