现在很清楚what a metaclass is,我总是使用一个相关的概念而不知道它的真正含义.
我想每个人都用括号做错了,导致“对象不可调用”异常.更重要的是,使用__init__和__new__会想知道这个血腥的__call__可以用于什么.
你能给我一些解释,包括魔术方法的例子吗?
解决方法:
可调用是可以调用的任何东西.
built-in callable (PyCallable_Check in objects.c)检查参数是否为:
>带有__call__方法或类的类的实例
>是一个具有非null tp_call(c struct)成员的类型,否则表示可调用性(例如在函数,方法等中)
名为__call__的方法是(according to the documentation)
Called when the instance is ”called” as a function
例
class Foo:
def __call__(self):
print 'called'
foo_instance = Foo()
foo_instance() #this is calling the __call__ method