在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
如何检索类类型的子类?
答案 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__()