2017-08-09 24 views
1

在python3中,object是所有類的基礎。如何檢索python3中的類類型的子類?

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

但是:

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

類 '類型' 爲對象的supclass和子類。在官方文件蟒__class__

認定中的3.6.2

  • 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

__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__()