Python类对象构造疑问:__call__方法的位置在哪里?
Python类对象的__call__方法位置解析
在Python中,类本身是元类的实例,默认元类为type。当你调用Foo()创建类的实例时,本质是将Foo这个元类实例(对象)作为可调用对象使用,此时触发的是它所属元类的__call__方法,具体位置分两种情况:
- 默认场景:若未自定义元类,这个
__call__是type类的成员方法,可通过type.__call__直接访问。类(如Foo)的__call__属性本质是继承自type的方法。 - 自定义元类场景:如果定义了继承
type的自定义元类,且在元类中重写了__call__,那么类(使用该元类定义的类)被调用时,触发的是自定义元类中的__call__方法。
举个简单的验证代码:
class Foo: def __init__(self): pass # 查看Foo的元类是type print(type(Foo)) # 输出: <class 'type'> # 验证Foo的__call__来自type.__call__ print(Foo.__call__ is type.__call__) # 输出: True
需要注意:如果在类内部定义了__call__方法,那是给类的实例使用的——当你创建foo = Foo()后调用foo()时,才会触发这个实例的__call__,和创建类实例时触发的元类__call__完全是两个不同的方法。
内容的提问来源于stack exchange,提问作者user3103957
相关产品推荐
相关产品推荐

