[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)


답변

모두 호출되도록하려면 super모든 수준에서 사용하십시오 .


답변