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 內置作用域
這樣一層層查找,找到就停止搜索,如果沒找到,就未定義的錯誤.