在Python3.x中,'super().__init__()'是什么意思?

9
这两个代码示例有何不同之处?
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个回答

8
在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
>>

4
在这种情况下,您正在为所有类(即类型)调用基类的__init__方法-而在另一种情况下,则不是。
由于默认情况下此方法不起作用,因此两个列表之间实际上没有区别。
(真正执行类创建魔法的是元类__new__方法-并且在Python中不可能没有调用本机基础元类'__new__方法而创建新对象。)

0

Super让你避免显式地引用基类,这很方便。但主要优势在于多重继承,各种有趣的事情都可以发生。如果你还没有看过super的标准文档,请去看一下。


1
来源:其他答案 - Muhammad Yasirroni

-2

代码块1在Python 2中会出错,但在Python 3中可以通过。代码块2在两者中都可以通过。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接