在Python 2.7中,通过super(self .__ class__,self)调用Super Constructor不是更好吗?

时间:2017-01-17 19:05:01

标签: python python-3.x python-2.7 inheritance super

要在Python 2.7中调用父类的构造函数,我见过的标准代码是:

super(Child, self).__init__(self, val)

其中Child是子类。 (在Python 3.x中,这是简化的,但我现在必须使用2.7。)我的问题是,在python 2.7中使用super的“规范”不是更好:

super(self.__class__, self).__init__(self, val)

我已经测试了这个,它似乎有效。有没有理由不使用这种方法?

2 个答案:

答案 0 :(得分:5)

  

在Python 3.x中,这是简化的,但我现在必须使用2.7。

在Python 2.7中调用超级构造函数的更好方法是使用Python-Future。它允许在Python 2中使用Python 3 trait Foo[A] { def combine(that: A): A } class FooImpl1 extends Foo[FooImpl1] { override def combine(that: FooImpl1): FooImpl1 = ??? } class FooImpl2 extends Foo[FooImpl2] { override def combine(that: FooImpl2): FooImpl2 = ??? }

super()

输出:

from builtins import super  # from Python-Future

class Parent(object):
    def __init__(self):
        print('Hello')

class Child(Parent):
    def __init__(self):
        super().__init__()


Child()

答案 1 :(得分:4)

当类被子类化时,此结构会导致RecursionError

MCVE:

class A(object):
    def __init__(self):
        super(self.__class__, self).__init__()


class B(A):
    pass

B()