什么时候使用 Parent.__init__(self) 什么时候不使用它?
When to use Parent.__init__(self) and not to use it?
我有这个代码:
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)
什么时候使用它?
在多重继承中,我们不需要它(例如如果有就写两次)?
未绑定方法调用 (Parent.__init__(self, ...)
) 通常不能很好地工作 多重继承 -- 就像简单地继承 __init__
(如果委派父级是你在你的子class方法中所做的一切,不要 - 只是省略在子class中定义方法所以它继承来自超级class).
在您的示例中,这完全没有实际意义,因为两个超级classes 都具有相同的 __init__
实现(在原始 Q 中,现在进行了编辑以更改它),所以这并不重要你知道。
更一般地说,这就是引入 super
的目的——它在 Python 3 中运行顺畅,在 Python 2 中运行稍差(在后一种情况下,仅适用于新的-style classes,通常继承自 object
——但是没有人应该再定义旧式 classes!-),但它仍然适用于多重继承比较旧的方法,例如显式调用 Parent.__init__
(不过,只有在层次结构中的每个 class 都合作时它才有效)。
有关 super
等的更多信息,请参阅 Understanding Python super() with __init__() methods。
我有这个代码:
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)
什么时候使用它?
在多重继承中,我们不需要它(例如如果有就写两次)?
未绑定方法调用 (Parent.__init__(self, ...)
) 通常不能很好地工作 多重继承 -- 就像简单地继承 __init__
(如果委派父级是你在你的子class方法中所做的一切,不要 - 只是省略在子class中定义方法所以它继承来自超级class).
在您的示例中,这完全没有实际意义,因为两个超级classes 都具有相同的 __init__
实现(在原始 Q 中,现在进行了编辑以更改它),所以这并不重要你知道。
更一般地说,这就是引入 super
的目的——它在 Python 3 中运行顺畅,在 Python 2 中运行稍差(在后一种情况下,仅适用于新的-style classes,通常继承自 object
——但是没有人应该再定义旧式 classes!-),但它仍然适用于多重继承比较旧的方法,例如显式调用 Parent.__init__
(不过,只有在层次结构中的每个 class 都合作时它才有效)。
有关 super
等的更多信息,请参阅 Understanding Python super() with __init__() methods。