문제

Python 코드가있는 경우 라코 디스

그리고 저는 C 클래스를 가지고 있는데, 슈퍼 클래스 (AB)를 통해 반복하는 방법이 있습니까?유사 코드 : 라코 디스

한 가지 해결책은 inspect module getclasstree 함수 인 것 같습니다. 라코 디스

하지만 이것이 목표를 달성하는 "Pythonian"방법인가요?

도움이 되었습니까?

해결책

C.__bases__는 수퍼 클래스의 배열이므로 다음과 같이 가상 함수를 구현할 수 있습니다. 라코 디스

하지만 대부분의 경우 cls.__bases__를 직접 참조하는 것이 더 쉬울 것이라고 생각합니다.

다른 팁

@John : 스 니펫이 작동하지 않습니다. 기본 클래스 (메타 클래스라고도 함)의 클래스 를 반환하고 있습니다.당신은 정말로 cls.__bases__를 원합니다 : 라코 디스

또한 Python 2.4 이상을 사용하는 경우 생성자 표현식 대신 목록 ([]을 통해)을 만든 다음 튜플 (tuple를 통해)로 변환합니다.예 : 라코 디스

이것은 다소 혼란스러운 예이지만 genexp는 일반적으로 쉽고 멋집니다.:)

검사 모듈은 좋은 시작이었습니다. getmro 를 사용하세요.기능 : <인용구>

cls를 포함하여 cls 클래스의 기본 클래스 튜플을 메서드 확인 순서로 반환합니다.이 튜플에는 클래스가 두 번 이상 나타나지 않습니다.... 라코 디스

반환 된 튜플의 첫 번째 요소는 C입니다. 무시해도됩니다.

super ()가 클래스를 호출하는 순서를 알아야하는 경우 C.__mro__를 사용할 수 있으므로 inspect가 필요하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top