python的點號運算和LEGB規則的學習理解

python是一門完全支持面向對象風格的語言.那麼我就從面向對象的三要素講起:

1 封裝

2 繼承

3 多態

python在這三個方面都有着自己的特色.

1 python的封裝是約定 ,而不是約束, 因爲你已經是成年人了.

2 python的繼承 實現本質是點號運算

3 python的多態是基於協議,基於行爲的多態

下面我們講講python的變量查找規則

1 簡單的變量--遵循LEGB查找規則
2 點號運算 x.y 搜索對象中的屬性y, 這個具有通用性, 可以用於任何對象.

python的繼承基於屬性查找?對的,這種規則即統一,又簡單,非常有特色.

假如我們有一個基類X ,然後Y繼承與X, x是Y的實例,這裏就形成了一個非常簡單的繼承樹.也就是我們的搜索樹.
X--->Y--->x
由於python中的類也是對象,所以我們的這顆樹的成員本質都是一樣的--對象.
這顆樹上的每一個對象都有自己的命名空間.一般這個命名空間技術上用一個可維護的字典來實現. 在這個繼承樹上我們查找一個屬性x.name.那麼就會按照廣度遍歷的方法,搜索這顆樹,找到name屬性爲止,沒找到就拋出異常. 這就是python的繼承.

LEGB是針對於簡單變量的變量搜索規則.

1 在本地查找
2 嵌套作用域
3 全局作用域
4 內置作用域
這樣一層層查找,找到就停止搜索,如果沒找到,就未定義的錯誤.
發佈了40 篇原創文章 · 獲贊 1 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章