如何在python3中检索类类型的子类?

时间:2017-08-09 03:20:54

标签: python

在python3中,object是所有类的基础。

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

然而:

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

class'type'是object的supclass和subclass。

  

官方文档python 3.6.2中__class__的定义

     
      
  • instance.``__class__

         

    类实例所属的类。

  •   

尝试'输入'

>>> 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 个答案:

答案 0 :(得分:1)

__subclasses__周围没有足够的文档。但是,似乎要求来自type的dunder需要“ type ”对象的实例

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

行为与对象object一致,因此:

type.__subclasses__(object) == object.__subclasses__()