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)
在 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)
在一种情况下,您正在__init__为所有类(即类型)调用基类的方法,而在另一种情况下则不是。
由于此方法默认不执行任何操作,因此两个列表之间实际上没有区别。
(真正执行类创建魔法的是元类__new__方法 - 如果不调用本机基元类方法,则不可能在 Python 中创建新对象__new__。