클래스가 주어지면 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__
에는 모든 기본 클래스가 있습니다.
그것이 도움이되기를 바랍니다!
답변
python 3.7에서는 inspect를 가져올 필요가 없습니다. type.mro가 결과를 제공합니다.
>>> class A:
... pass
...
>>> class B(A):
... pass
...
>>> type.mro(B)
[<class '__main__.B'>, <class '__main__.A'>, <class 'object'>]
>>>
python 3.x에서는 모든 클래스가 기본 객체 클래스에서 상속됩니다.
답변
Python doc 에 따르면 class.__mro__
속성 또는 class.mro()
메소드를 간단히 사용할 수도 있습니다 .
>>> 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
답변
Jochen의 답변은 매우 유용하고 정확하지만 inspect 모듈의 .getmro () 메소드를 사용하여 클래스 계층을 얻을 수 있으므로 Python의 상속 계층이 다음과 같이 강조 표시되어야합니다.
전의:
class MyClass(YourClass):
상속 클래스
- 어린이 수업
- 파생 클래스
- 아강
전의:
class YourClass(Object):
상속 된 클래스
- 학부모 수업
- 기본 수업
- 슈퍼 클래스
한 클래스는 다른 클래스에서 상속 할 수 있습니다. 클래스의 속성이 상속됩니다. 특히 해당 메서드가 상속됩니다. 이는 상속 (자식) 클래스의 인스턴스가 상속 된 (부모) 클래스의 속성에 액세스 할 수 있음을 의미합니다.
인스턴스-> 클래스-> 상속 된 클래스
사용
import inspect
inspect.getmro(MyClass)
파이썬 내에서 계층 구조를 보여줍니다.