要在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)
?
我已经测试了这个,它似乎有效。有没有理由不使用这种方法?
答案 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()