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

问题描述 投票:2回答:4

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

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
class python-3.x super metaclass
4个回答
3
投票

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

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

(真正执行类创建魔术的是元类__new__方法,并且在不调用本地基本元类'__new__方法的情况下,不可能在Python中拥有新对象。


1
投票

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

0
投票

Super使您避免显式引用基类,这可能很好。但是主要优点来自多重继承,可以发生各种fun stuff。如果尚未,请参阅standard docs on super


-1
投票

块1中的代码将在Python 2中中断,但将在Python 3中通过。块2中的代码将同时通过两者。

© www.soinside.com 2019 - 2024. All rights reserved.