문제

수업이 주어졌습니다 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에서 모든 클래스는 기본 객체 클래스에서 상속됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top