は、次のPythonコードを考えてみましょう:孫でsuper
機能を実行する場合解決ダイアモンド継承
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)
、ChildAとChildBは両方正しい引数を取得するよう__init__
引数をフォーマットする適切な方法は何ですか?
また、GrandChildクラス内からspeak
メソッド(ChildAのバージョンとChildBのバージョン)の2つの異なるバージョンにアクセスするにはどうすればよいですか?この方法を呼び出すときに明示的にself
を配置する必要があり
ChildA.__init__(self, a_name, a_serial)
ChildB.__init__(self, b_name, b_serial)
注:
これは多重継承の有効なユースケースのようには思えません。代わりに合成を使用してみませんか? – MSeifert