다음 파이썬 코드를 고려하십시오 손자의 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 버전)의 두 가지 버전에 어떻게 액세스합니까? 이 방법으로 호출 할 때 명시 적으로 self
을 둘 필요가
ChildA.__init__(self, a_name, a_serial)
ChildB.__init__(self, b_name, b_serial)
참고 :
다중 상속을위한 유효한 유스 케이스처럼 보이지 않습니다. 대신 컴포지션을 사용하지 않는 이유는 무엇입니까? – MSeifert