6

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

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

4 回答 4

4

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

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

(真正执行类创建魔法的是元类__new__方法——如果不调用本机基础元类方法,就不可能在 Python 中拥有新对象__new__

于 2013-10-23T00:17:23.940 回答
4

在 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
>>
于 2015-06-28T19:07:01.713 回答
0

Super 让您避免显式引用基类,这很好。但主要优势在于多重继承,可以发生各种有趣的事情。如果您还没有,请参阅super 上的标准文档。

于 2013-10-23T23:09:14.573 回答
-2

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

于 2014-11-04T11:17:05.210 回答