質問

クラス Foo を指定( new-style クラスであるかどうかを問わず)、継承階層のどこでもベースクラスをすべて生成する方法- 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 __ によって返されるタプルには、すべての基本クラスがあります。

お役に立てばと思います!

Jochenの答えは非常に有用で正しいですが、inspectモジュールの.getmro()メソッドを使用してクラス階層を取得できるため、Pythonの継承階層が次のようであることを強調することも重要です:

例:

class MyClass(YourClass):

継承クラス

  • 子クラス
  • 派生クラス
  • サブクラス

例:

class YourClass(Object):

継承されたクラス

  • 親クラス
  • 基本クラス
  • スーパークラス

1つのクラスは別のクラスから継承できます  -クラスの属性は継承されます  -特に、そのメソッドは継承されます  -これは、継承(子)クラスのインスタンスが、継承(親)クラスの属性にアクセスできることを意味します

インスタンス-&gt;クラス-&gt;継承されたクラス

使用

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'>]
>>>

Python 3.xでは、すべてのクラスがベースオブジェクトクラスから継承することに注意してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top