クラスFoo
( new-style クラスであるかどうか)が与えられた場合、基本クラスをall生成する方法-継承階層のどこか-it issubclass
of?
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__
プロパティ で利用可能なpython 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__
によって返されるTupleには、すべての基本クラスがあります。
それが役に立てば幸い!
Jochenの答えは非常に有用で正しいですが、inspectモジュールの.getmro()メソッドを使用してクラス階層を取得できるため、Pythonの継承階層が次のとおりであることを強調することも重要です。
例:
class MyClass(YourClass):
継承クラス
例:
class YourClass(Object):
継承されたクラス
あるクラスから別のクラスを継承できます-クラスの属性が継承されます-特に、そのメソッドが継承されます-これは、継承(子)クラスのインスタンスが継承(親)クラスの属性にアクセスできることを意味します
インスタンス->クラス->継承されたクラス
を使用して
import inspect
inspect.getmro(MyClass)
python内で階層を表示します。
python 3.7では、inspectをインポートする必要はありません。type.mroは結果を表示します。
>>> class A:
... pass
...
>>> class B(A):
... pass
...
>>> type.mro(B)
[<class '__main__.B'>, <class '__main__.A'>, <class 'object'>]
>>>
in 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
_