考虑Python多重继承:
class A(object):
def __init__(self):
self.name = 'a'
def y(self):
return "A"
class B(A):
def __init__(self):
A.__init__(self)
self.name = 'b'
def y(self):
return "B"
class C(object):
def __init__(self):
self.name = 'c'
def y(self):
return "C"
class D(C, B):
def __init__(self):
C.__init__(self)
B.__init__(self)
创建D
的实例时可以看出,当Python浏览每个构造函数时,它会重新分配self.name
,因此self.name
的值正如预期的那样分配给它的最后值:
>>> foo = D()
>>> print(foo.name)
b
但是,对于方法y()
,分配的方法似乎是分配给它的第一个方法:
>>> print(foo.y())
C
为什么要分配哪些属性之间的差异?有哪些规则?事实上,Python手册有一个关于multiple inheritance的部分,但是我没有看到这里提到的这个主题。
请注意,这个问题不是家庭作业,而是根据精彩的Introduction to Computer Science and Programming Using Python课程中的课程进行改编。