【发布时间】:2016-09-03 18:24:00
【问题描述】:
class Parent1(object):
def foo(self):
print "P1 foo"
def bar(self):
print "P1 bar"
class Parent2(object):
def foo(self):
print "P2 foo"
def bar(self):
print "P2 bar"
class Child(Parent1, Parent2):
def foo(self):
super(Parent1, self).foo()
def bar(self):
super(Parent2, self).bar()
c = Child()
c.foo()
c.bar()
目的是从 Parent1 继承 foo() 并从 Parent2 继承 bar()。但是导致 parent2 和 c.bar() 的 c.foo() 导致错误。请指出问题并提供解决方案。
【问题讨论】:
-
super的第一个参数是在继承层次结构中开始查找“上方”的类,因此foo将来自Parent2,bar将来自object(它没有这样的属性,大概是导致你只是顺便提到的错误)。相反,在您的super调用中使用Child和Parent1。 -
为什么不直接使用
Parent1.foo()和Parent2.bar()? -
@jonrsharpe:感谢您的澄清。您建议的可能重复的问题具有初始化函数 init 。所以,我不确定普通方法和 init 是否会遵循相同的继承规则
-
所有实例方法,
__init__和其他 "magic" 方法包括在内,都遵循相同的规则。
标签: python python-2.7 oop multiple-inheritance