'super().__ init __()'在python 3.x中意味着什么?

时间:2013-10-23 00:07:51

标签: class python-3.x super metaclass

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

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

4 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

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

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

例如:

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

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

>> obj = SubType(2) 
2
>>

答案 2 :(得分:0)

Super可以避免显式引用基类,这可能很好。但主要优势在于多重继承,其中可能发生各种fun stuff。如果您还没有,请参见standard docs on super

答案 3 :(得分:-1)

块1中的代码将在Python 2中中断,但将在Python 3中传递。块2中的代码将为两者传递。