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