2017-08-09 15 views
1

python3では、objectはすべてのクラスのベースです。しかしpython3でクラス型のサブクラスを取り出す方法は?

>>> object 
<class 'object'> 
>>> object.mro() 
[<class 'object'>] 
# it makes sense. 

>>> object.__class__ 
<class 'type'> 
>>> object.__subclasses__() 
[<class 'type'>, ....] 

クラスのタイプは 'オブジェクトのsupclassおよびサブクラスです。

公式ドキュメントパイソン3.6.2

  • instance.``__class__

    クラスのインスタンスが属するクラスの__class__のdefination。

試し 'タイプ'

>>> type 
<class 'type'> 
>>> type.__class__ 
<class 'type'> 
>>> type.__subclasses__ 
<method '__subclasses__' of 'type' objects> 

エラーが発生し、その後:

>>> type.__subclasses__() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: descriptor '__subclasses__' of 'type' object needs an argument 

クラスタイプのサブクラスを取得する方法は?

答えて

1

__subclasses__については十分な文書がありません。しかし、それはインスタンスのタイプ 'オブジェクトのtypeからそのdunderを必要呼び出す表示されます。実際には

>>> type.__subclasses__(type) # 'type' is an instance of itself 
[<class 'abc.ABCMeta'>, <class 'enum.EnumMeta'>, <class '__main__.a'>] 

type.__subclasses__(obj)ではなく、すべてのオブジェクトがあるので、objから直接メソッドを呼び出すのに使用することができますtypeのインスタンス:

>>> int.__subclasses__() 
[<class 'bool'>, <enum 'IntEnum'>, ...] 
>>> type.__subclasses__(int) 
[<class 'bool'>, <enum 'IntEnum'>, ...] 

と行動は、オブジェクトと一致です、そのように:

type.__subclasses__(object) == object.__subclasses__() 
関連する問題