當訪問objectname.attributename,以下對象中搜索順序爲屬性:
1. 對象本身(objectname.__dict__
或任何對象名的Python提供的屬性)。
2. 該對象的類型(objectname.__class__.__dict__
)。注意只搜索__dict__
,這意味着只有用戶提供的類的屬性。換句話說,即使objectname.__class__.__bases__
確實存在,objectname.__bases__
也不會返回任何內容。
3. 對象類的基礎,它們的基礎等等。 (objectname.__class__.__bases__
各自的__dict__
)。不止一個基地不會混淆Python,現在不應該關注我們。需要注意的是,搜索所有鹼基,直到找到屬性。
爲了測試我建立這個例子
class Superb(object):
svar=1
class Sub(Superb):
...
class Leaf(Sub):
def __init__(self):
print(Leaf.svar)
lobj=Leaf()
實例創建工作和印刷Leaf.svar的值(如1)理論。 這意味着,在解析Leaf.svar時,Python查看了葉子對象的基地的基礎,這在本文中未提及。按照該文章,對象的(即類型)的基礎被搜索。我懷疑文章作者犯了什麼錯誤,這當然是我理解中的一個空白。有人可以澄清。
「對象的類的基礎,**它們的基**等等」 –
對象的(葉)類的基礎是'類型'它的基礎是'對象' - >這個搜索不走通子(葉鹼)和卓越(子鹼)的路徑 –
沒有葉子的'bases'是'(子,')。嘗試'打印(Leaf .__基地__)'。你是怎麼得到'type'的? –