【问题标题】:What does 'super().__init__()' mean in python 3.x?'super().__init__()' 在 python 3.x 中是什么意思?
【发布时间】:2013-11-01 01:39:59
【问题描述】:

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

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


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        Super 让您避免显式引用基类,这很好。但主要优势在于多重继承,所有类型的fun stuff 都可能发生。如果您还没有,请参阅standard docs on super

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 2015-11-04
            • 1970-01-01
            • 1970-01-01
            • 2015-12-30
            • 1970-01-01
            • 1970-01-01
            • 2015-03-24
            • 2018-08-30
            • 1970-01-01
            相关资源
            最近更新 更多