Python中的OOP层次结构

epfja78i  于 2023-04-10  发布在  Python
关注(0)|答案(1)|浏览(118)

在Python中,一切都是对象。
如果我们创建一个用户定义类的示例,下面是示例是如何创建的。
步骤:1调用类型类中的__call__()方法。
第二步:__call__方法依次调用__new__()__init__()方法来创建用户定义类的示例。

class Foo()
    def __init__(self):
        ...

Foo()〈---在这里,发生了上述两个步骤。
类似地,当为Foo类创建一个对象时,需要调用__call__()方法,然后调用__new__()__init__()方法。
有人能帮助这个__call__()方法位于哪里吗?
我试图理解对象for(不是of)类是如何构造的。
谢谢!

ru9i0ody

ru9i0ody1#

它属于type类:

>>> type.__call__
<slot wrapper '__call__' of 'type' objects>

因为类是type的示例,所以它们有这个方法:

>>> class A: pass
... 
>>> A.__call__
<method-wrapper '__call__' of type object at 0x55d97f5cbf60>

因此,创建一个像A()这样的对象相当于调用A.__call__,这又相当于调用type.__call__,并将A作为self参数:

>>> A()
<__main__.A object at 0x7efe29a5fac0>
>>> A.__call__()
<__main__.A object at 0x7efe29a5f460>
>>> type.__call__(A)
<__main__.A object at 0x7efe29a5eef0>

相关问题