맞아요. 그래서 스퀘어가 실제로 2 명의 부모를 필요로하지 않는 것처럼 특정 중복을 무시하고 학교 프로젝트를 위해이 상속 계층을 만들어야합니다. 나는 이상한 길을 발견했습니다. 파이썬은 슈퍼 콜을 처리합니다.다중 상속 및 다단계 상속
다음 코드에서 사각형을 초기화 할 때 super를 호출하여 Rectangle의 초기화 메서드를 실행합니다. 이것은 의미가 있습니다. 그런 다음 직사각형이 super를 호출하여 평행 사변형의 초기화 메소드로 이동해야합니다. 그러나, 일부 디버깅 후, 나는 그것의 수퍼 콜을 할 때, 실제로 Rhombus의 초기화 메소드를 호출한다는 것을 발견했다. 누군가 여기서 일어나는 일을 설명하고 가능하다면 명시 적으로 클래스 이름을 사용하지 않고 이것을 올바르게 구현할 수 있습니까?
관련 코드는 다음과 같습니다.
class Parallelogram:
def __init__(self, base, side, theta):
self.base = base
self.side = side
self.theta = theta
class Rectangle(Parallelogram):
def __init__(self, base, side):
super(Rectangle, self).__init__(base, side, 90)
class Rhombus(Parallelogram):
def __init__(self, side, theta):
super(Rhombus, self).__init__(side, side, theta)
class Square(Rectangle, Rhombus):
def __init__(self, side):
super(Square, self).__init__(side, side)
당신이 방법을 확인 순서에게의 –
가능한 중복을 알고 당신의 전화 클래스 객체의 MRO를 통해 상속의 실행 순서를 확인하실 수 있습니다 [파이썬의 슈퍼()와 어떻게 작동 하는가 다중 상속?] (https://stackoverflow.com/questions/3277367/how-does-pythons-super-work-with-multiple-inheritance) –
이것을 보는 것은 python-3.x에 태그가 붙어 있습니다. super()는 인수없이 끝났다. 추천 읽기 : [Python의 super() 슈퍼로 간주!] (https://rhettinger.wordpress.com/2011/05/26/super-considered-super/) –