[python] 파이썬 클래스의 부모를 얻는 방법?
파이썬 클래스의 부모 클래스를 어떻게 구할 수 있습니까?
답변
다음 속성을 사용하십시오.
cls.__bases__
로부터 문서 :
클래스 객체의 기본 클래스 튜플.
예:
>>> str.__bases__
(<type 'basestring'>,)
다른 예시:
>>> class A(object):
... pass
...
>>> class B(object):
... pass
...
>>> class C(A, B):
... pass
...
>>> C.__bases__
(<class '__main__.A'>, <class '__main__.B'>)
답변
즉각적인 것보다는 모든 조상 을 원한다면 inspect.getmro를 사용 하십시오 .
import inspect
print inspect.getmro(cls)
유용하게도 이것은 모든 메소드 클래스를 “메소드 해결 순서”(메서드 해결 순서)로 제공합니다. 즉, 메소드를 해석 할 때 조상이 확인되는 순서 (또는 실제로는 다른 속성-메소드 및 기타 속성이 동일한 네임 스페이스에 존재 함) 결국 파이썬에서 ;-).
답변
새로운 스타일의 클래스에는 메소드 분석 순서로 상위 클래스 목록을 리턴하는 mro 메소드가 있습니다.
답변
가장 빠른 방법은 모든 부모를 참조하고, 질서는 바로 내장 사용__mro__
즉 repr(YOUR_CLASS.__mro__)
>>>
>>>
>>> import getpass
>>> getpass.GetPassWarning.__mro__
출력, IN ORDER
(<class 'getpass.GetPassWarning'>, <type 'exceptions.UserWarning'>,
<type 'exceptions.Warning'>, <type 'exceptions.Exception'>,
<type 'exceptions.BaseException'>, <type 'object'>)
>>>
거기 있어요 바로 지금 “최고”대답은 182 표를 가지고 (내가 이것을 입력하고로)하지만이를 찾고 루프 뒤얽힌 어떤 것보다 훨씬 간단 베이스 클래스가 두 개 이상의 부모를 확장 할 때 말할 것도없고, 한 번에 하나 개의 클래스를 클래스. inspect
클라우드 만 가져 와서 사용하여 불필요하게 범위를 지정하십시오. 솔직히 사람들이 내장 기능을 사용하는 것을 모르는 것은 부끄러운 일입니다.
이게 도움이 되길 바란다!
답변
부모를 얻으려면 기본을 사용하십시오 __mro__
(@ naught101에서 지적한대로) 메소드 해결 순서를 얻기 위해 사용하십시오 (따라서 init가 어떤 순서로 실행되었는지 알 수 있습니다).
기본 (및 기존 객체의 클래스를 먼저 가져옴) :
>>> some_object = "some_text"
>>> some_object.__class__.__bases__
(object,)
최신 Python 버전에서 mro의 경우 :
>>> some_object = "some_text"
>>> some_object.__class__.__mro__
(str, object)
분명히 클래스 정의가 이미 있으면 __mro__
직접 호출 할 수 있습니다.
>>> class A(): pass
>>> A.__mro__
(__main__.A, object)