주어진 클래스의 계층 구조에 모든 기본 클래스를 나열 하시겠습니까?
-
05-07-2019 - |
문제
수업이 주어졌습니다 Foo
( 새로운 스타일 클래스 여부), 어떻게 생성합니까? 모두 기본 클래스 - 상속 계층의 어느 곳에서나 - It 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'>)
다른 팁
참조 __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__
모든 기본 클래스가 있습니다.
도움이되기를 바랍니다!
Jochen의 답변은 매우 유용하고 정확하지만, 검사 모듈의 .getMro () 메소드를 사용하여 클래스 계층 구조를 얻을 수 있으므로 Python의 상속 계층 구조는 다음과 같음을 강조하는 것이 중요합니다.
전:
class MyClass(YourClass):
상속 수업
- 어린이 수업
- 파생 수업
- 아강
전:
class YourClass(Object):
상속 수업
- 부모 수업
- 기본 클래스
- 슈퍼 클래스
한 클래스는 다른 클래스에서 상속 될 수 있습니다.
인스턴스 -> 클래스 -> 그런 다음 상속 클래스
사용
import inspect
inspect.getmro(MyClass)
파이썬 내에서 계층 구조를 보여줄 것입니다.
Python 3.7에서는 검사를 가져올 필요가 없습니다. type.mro는 결과를 제공합니다.
>>> class A:
... pass
...
>>> class B(A):
... pass
...
>>> type.mro(B)
[<class '__main__.B'>, <class '__main__.A'>, <class 'object'>]
>>>
Python 3.X에서 모든 클래스는 기본 객체 클래스에서 상속됩니다.
제휴하지 않습니다 StackOverflow