这两个代码示例之间有什么区别?
1:
class SubType(type):
def __init__(cls, name, bases, dct):
super().__init__(name, bases, dct)
2:
class SubType(type):
def __init__(cls, name, bases, dct):
pass
在一种情况下,您正在为所有类(即类型)调用基类的__init__
方法-在其他情况下则不是。
由于此方法默认情况下不执行任何操作,因此两个列表之间实际上没有区别。
(真正执行类创建魔术的是元类__new__
方法,并且在不调用本地基本元类'__new__
方法的情况下,不可能在Python中拥有新对象。
在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
>>
Super使您避免显式引用基类,这可能很好。但是主要优点来自多重继承,可以发生各种fun stuff。如果尚未,请参阅standard docs on super。
块1中的代码将在Python 2中中断,但将在Python 3中通过。块2中的代码将同时通过两者。