__init__
실행 순서를 올바르게 설정하려고합니다. 계층 구조는 두 가지로 구성됩니다. 왼쪽 브랜치는 오른쪽 브랜치의 추상 메소드를 구현한다. 오른쪽 지점에는 또한 분할이 있습니다. 이제 저는 그들에게 실행을 원합니다 : 위에서 아래로, 그리고 위에서 아래로 오른쪽에서 왼쪽으로.Python에서 다중 상속을 사용하여 특정 __init__ 실행을 강제 실행합니다.
파이썬 3에서이를 달성 할 수있는 방법이 있습니까?
에게 는그래서 기본적으로 (이하지 않는) 순서대로 번호를 인쇄해야 다음과 L2는 R2의 추상 메소드를 구현하기 때문에
from abc import abstractmethod, ABCMeta
class L1:
def __init__(self):
super().__init__()
print(1)
class R1(metaclass=ABCMeta):
def __init__(self):
super().__init__()
print(3)
@abstractmethod
def m(self):
pass
class L2(L1):
def __init__(self):
super().__init__()
print(2)
def m(self):
pass
class R2a(R1):
def __init__(self):
super().__init__()
print(4)
class R2b(R1):
def __init__(self):
super().__init__()
print(4)
class X(L2, R2a):
pass
class Y(L2, R2b):
pass
x = X()
print("--")
y = Y()
불행하게도 내가 L2와 R2의 순서를 변경할 수 없습니다 (이있을 것 오류가 생길 경우).
가능합니까? 내가 중요하지 않습니다 생각했지만, 내가 거기, 내 진짜 구조에서 점에 유의하고자 :
는
편집 (? 당신은 쉬운 문제 같은 종류를 해결하기 위해 MRO에 대해 생각하는 좋은 방법을 알고 계십니까) 실제로는 L2a (L1), L2b (L1) 및 L2 (L1a, L2a)와 같이 L면의 다이아몬드입니다. 그것은 일부 기능을 완전히 분리하는 것입니다.
"새 스타일 클래스"를 얻으려면'object' :'class L1 (object) :'의 최상위 클래스를 파생시켜야합니다. – Ber
@Ber, 아니요, 그는 Python 3을 사용하고 있습니다 (그렇지 않으면 메타 클래스 구문이 작동하지 않습니다). 그래서 그는 객체에서 명시 적으로 상속 할 필요가 없습니다. – Duncan