考慮以下Python代碼:解決菱形繼承
class Parent(object):
def __init__(self, name, serial_number):
self.name = name
self.serial_number = serial_number
class ChildA(Parent):
def __init__(self, name, serial_number):
self.name = name
self.serial_number = serial_number
super(ChildA, self).__init__(name = self.name, serial_number = self.serial_number)
def speak(self):
print("I am from Child A")
class ChildB(Parent):
def __init__(self, name, serial_number):
self.name = name
self.serial_number = serial_number
super(ChildB, self).__init__(name = self.name, serial_number = self.serial_number)
def speak(self):
print("I am from Child B")
class GrandChild(ChildA, ChildB):
def __init__(self, a_name, b_name, a_serial_number, b_serial_number):
self.a_name = a_name
self.b_name = b_name
self.a_serial_number = a_serial_number
self.b_serial_number = b_serial_number
super(GrandChild, self).__init_(something)
當運行在如GrandChild的super
功能,什麼是格式化__init__
參數,以便ChildA和ChildB都得到正確的參數的正確方法?
另外,如何從GrandChild類中訪問speak
方法(ChildA的版本和ChildB的版本)的兩個不同版本?
這似乎不是多重繼承的有效用例。爲什麼不使用組合來代替? – MSeifert