주어진 클래스의 계층 구조로 모든 기본 클래스를 나열합니까?
클래스가 주어지면 Foo
( 새로운 스타일의 클래스인지 아닌지) 상속 계층의 어느 곳에서나 모든 기본 클래스를 어떻게 생성 issubclass
합니까?
inspect.getmro(cls)
새 클래스 클래스와 이전 스타일 클래스 모두에 대해 작동하며 NewClass.mro()
메소드 분석에 사용 된 순서로 클래스 및 모든 상위 클래스 목록과 동일하게 리턴합니다 .
>>> class A(object):
>>> pass
>>>
>>> class B(A):
>>> pass
>>>
>>> import inspect
>>> inspect.getmro(B)
(<class '__main__.B'>, <class '__main__.A'>, <type 'object'>)
기본 클래스의 튜플을 포함하는 python 에서 사용할 수 있는 __bases__
속성을 참조하십시오 class
.
>>> def classlookup(cls):
... c = list(cls.__bases__)
... for base in c:
... c.extend(classlookup(base))
... return c
...
>>> class A: pass
...
>>> class B(A): pass
...
>>> class C(object, B): pass
...
>>> classlookup(C)
[<type 'object'>, <class __main__.B at 0x00AB7300>, <class __main__.A at 0x00A6D630>]
inspect.getclasstree()
중첩 된 클래스 목록과 해당 기본을 만듭니다. 용법:
inspect.getclasstree(inspect.getmro(IOError)) # Insert your Class instead of IOError.
__bases__
클래스 객체 의 튜플을 사용할 수 있습니다 .
class A(object, B, C):
def __init__(self):
pass
print A.__bases__
에 의해 반환 된 튜플 __bases__
에는 모든 기본 클래스가 있습니다.
그것이 도움이되기를 바랍니다!
Although Jochen's answer is very helpful and correct, as you can obtain the class hierarchy using the .getmro() method of the inspect module, it's also important to highlight that Python's inheritance hierarchy is as follows:
ex:
class MyClass(YourClass):
An inheriting class
- Child class
- Derived class
- Subclass
ex:
class YourClass(Object):
An inherited class
- Parent class
- Base class
- Superclass
One class can inherit from another - The class' attributed are inherited - in particular, its methods are inherited - this means that instances of an inheriting (child) class can access attributed of the inherited (parent) class
instance -> class -> then inherited classes
using
import inspect
inspect.getmro(MyClass)
will show you the hierarchy, within Python.
In python 3.7 you don't need to import inspect, type.mro will give you the result.
>>> class A:
... pass
...
>>> class B(A):
... pass
...
>>> type.mro(B)
[<class '__main__.B'>, <class '__main__.A'>, <class 'object'>]
>>>
attention that in python 3.x every class inherits from base object class.
According to the Python doc, we can also simply use class.__mro__
attribute or class.mro()
method:
>>> class A:
... pass
...
>>> class B(A):
... pass
...
>>> B.__mro__
(<class '__main__.B'>, <class '__main__.A'>, <class 'object'>)
>>> A.__mro__
(<class '__main__.A'>, <class 'object'>)
>>> object.__mro__
(<class 'object'>,)
>>>
>>> B.mro()
[<class '__main__.B'>, <class '__main__.A'>, <class 'object'>]
>>> A.mro()
[<class '__main__.A'>, <class 'object'>]
>>> object.mro()
[<class 'object'>]
>>> A in B.mro()
True
참고URL : https://stackoverflow.com/questions/1401661/list-all-base-classes-in-a-hierarchy-of-given-class
'IT story' 카테고리의 다른 글
svn에서 체크 아웃 된 Android 프로젝트를 열 때 "subversion 명령 줄 클라이언트 : svn을 사용할 수 없습니다"오류 (0) | 2020.07.14 |
---|---|
Apache HttpClient로 유효하지 않은 SSL 인증서를 처리하는 방법은 무엇입니까? (0) | 2020.07.14 |
Java를 사용하여 텍스트를 클립 보드에 복사 (0) | 2020.07.14 |
부트 스트랩 4 센터 수직 및 수평 정렬 (0) | 2020.07.14 |
다른 디렉토리에 소스 파일이있는 Makefile (0) | 2020.07.14 |