我有这段代码:
class Pere():
def __init__(self, nom):
self.nom = nom
def yeux(self):
print 'les yeux bleus'
class Mere():
def __init__(self, nom):
self.nom = nom
def taille(self):
print 'je suis longue!'
class Enfant(Pere, Mere):
pass
在一些关于inheritance
的教程中,他们使用ParentClass.__init__(self, *args)
作为子构造函数。
以下是使用它的示例:
class Person(object):
def __init__(self, nom, age):
self.name = nom
self.age = age
def __str__(self):
return 'je suis {0}, et j\'ai {1} ans'.format(self.name, self.age)
class Militaire(Person):
def __init__(self, nom, age, grade):
Person.__init__(self, nom, age)
self.grade = grade
def __str__(self):
return Person.__str__(self) + ' et je suis un {0}'.format(self.grade)
何时使用?
在多重继承中,我们不需要它(例如,如果它存在,则写两次)?
答案 0 :(得分:3)
unbound-method调用(Parent.__init__(self, ...)
)在一般情况下具有多重继承效果不佳 - 就像简单地继承__init__
一样(如果委托给父项是全部的话)你在子类中的方法中做了什么,不要 - 只是省略在子类中定义方法,以便它继承自超类。)
在你的例子中,完全没有实际意义,因为两个超类都具有相同的__init__
实现(在原始Q中,现在已经编辑以改变它),所以你做什么并不重要
更一般地说,那是super
引入的内容 - 它在Python 3中运行顺畅,在Python 2中稍微少一些(在后一种情况下,仅适用于新式类,通常继承来自object
- 但是之后没有人应该再定义旧式类了! - ),但它仍然适用于多重继承,比旧方法更明智地调用Parent.__init__
(它只能很好地工作)但是,如果层次结构中的每个类都合作,那么。
有关super
等的详情,请参阅Understanding Python super() with __init__() methods。