class Meta(type):
def __call__(cls, *args, **kwargs):
print 'Meta.__call__ called.'
return super(Meta, cls).__call__(*args, **kwargs)
class MetaInstance(object):
__metaclass__ = Meta
# Instantiate class.
MetaInstance() # Meta.__call__ called.
class StandardClass(object):
@classmethod
def __call__(cls, *args, **kwargs):
print 'StandardClass.__call__ called.'
return super(StandardClass, cls).__call__(*args, **kwargs)
# Instantiate class.
StandardClass() # StandardClass.__call__ is not called!
当实例化一个类时,为什么要在类上调用metaclass的__call__方法,而不能在本机类的__call__上调用呢?
python大神给出的解决方案
创建类实例时,将调用元类(其实例为该类的实例)__call__。
# Instantiate class.
StandardClass() # StandardClass.__call__ is not called!
当创建一个类实例然后“调用”该实例时,该类的__call__被调用。我认为用__call__装饰classmethod不会起作用。
这将调用您的元类和类的__call__:
StandardClass()()