2016-11-09 44 views
2

例如,我定義一個類:Python中__name__的搜索屬性策略如何與正常策略不同?

class Test(object): 
    pass 
print dir(Test) 

得到以下結果:

['__class__','__delattr__','__dict__','__doc__','__format__','__getattribute__', '__hash__', '__init__', '__module__', '__new__','__reduce__','__reduce_ex__', '__repr__','__setattr__','__sizeof__','__str__','__subclasshook__','__weakref__'] 

打印測試。 流汗以下結果: 測試

我的問題是在測試沒有,爲什麼可以打印測試。 名稱名稱的搜索策略是什麼?

任何答案將不勝感激,謝謝!

回答

0

這是在Test.__class__dir,因爲__name__是在type類型定義:

>>> Test.__name__ 
'Test' 
>>> Test.__class__ 
<type 'type'> 
>>> dir(Test.__class__) 
[..., '__mro__', '__name__', '__ne__', ...] 

如果不能在一個類中找到的東西(的type實例)它的擡頭在其元類(通常是)type

+0

不會函數dir()列出對象從其基類中定義或繼承的所有屬性嗎? – MayflowerYuan

+0

是的所有在它的基類上定義的屬性。然而,dir(Test)正在返回'class'對象的屬性。 'class'本身本身沒有「基類」,只是一個元類'type'。 –

+0

哦,我明白,dir()不會列出其基類中的所有屬性。當您測試.__ name__時,屬性搜索策略將逐漸轉到__name__的基類。非常感謝@Sebastian Wozny – MayflowerYuan