문제
Python 코드가있는 경우 라코 디스
그리고 저는 C
클래스를 가지고 있는데, 슈퍼 클래스 (A
및 B
)를 통해 반복하는 방법이 있습니까?유사 코드 :
라코 디스
한 가지 해결책은 inspect module 과 getclasstree
함수 인 것 같습니다.
라코 디스
하지만 이것이 목표를 달성하는 "Pythonian"방법인가요?
해결책
C.__bases__
는 수퍼 클래스의 배열이므로 다음과 같이 가상 함수를 구현할 수 있습니다.
라코 디스
하지만 대부분의 경우 cls.__bases__
를 직접 참조하는 것이 더 쉬울 것이라고 생각합니다.
다른 팁
@John : 스 니펫이 작동하지 않습니다. 기본 클래스 (메타 클래스라고도 함)의 클래스 를 반환하고 있습니다.당신은 정말로 cls.__bases__
를 원합니다 :
라코 디스
또한 Python 2.4 이상을 사용하는 경우 생성자 표현식 대신 목록 ([]을 통해)을 만든 다음 튜플 (tuple
를 통해)로 변환합니다.예 :
라코 디스
검사 모듈은 좋은 시작이었습니다. getmro 를 사용하세요.기능 : <인용구>
cls를 포함하여 cls 클래스의 기본 클래스 튜플을 메서드 확인 순서로 반환합니다.이 튜플에는 클래스가 두 번 이상 나타나지 않습니다.... 라코 디스
반환 된 튜플의 첫 번째 요소는 C
입니다. 무시해도됩니다.
super ()가 클래스를 호출하는 순서를 알아야하는 경우 C.__mro__
를 사용할 수 있으므로 inspect
가 필요하지 않습니다.