'super().__init__()' 在 python 3.x 中是什么意思?

use*_*276 6 metaclass class super python-3.x

这两个代码示例有什么区别?

1:

class SubType(type):
    def __init__(cls, name, bases, dct):
        super().__init__(name, bases, dct)
Run Code Online (Sandbox Code Playgroud)

2:

class SubType(type):
    def __init__(cls, name, bases, dct):
        pass
Run Code Online (Sandbox Code Playgroud)

Mih*_*rei 9

在 python 3.x 中,这意味着调用超类(即类型)的 __init__ 方法(​​就好像它是当前类 SubType 的方法,因为当前类是超类的派生类)。

与 Python 2.x 中调用 super(type, self).__init__() 相同

例如:

class type:
       def __init__(self, a):
           print(a)

 class SubType(type):
       def __init__(self, a):
           super().__init__(a)

>> obj = SubType(2) 
2
>>
Run Code Online (Sandbox Code Playgroud)


jsb*_*eno 4

在一种情况下,您正在__init__为所有类(即类型)调用基类的方法,而在另一种情况下则不是。

由于此方法默认不执行任何操作,因此两个列表之间实际上没有区别。

(真正执行类创建魔法的是元类__new__方法 - 如果不调用本机基元类方法,则不可能在 Python 中创建新对象__new__