Python物件的屬性訪問過程

2021-08-08 16:52:03 字數 1028 閱讀 1600

只想回答乙個問題: 當編譯器要讀取obj.field時, 發生了什麼?

看似簡單的屬性訪問, 其過程還蠻曲折的. 總共有以下幾個step:

1. 如果obj本身(乙個instance )有這個屬性, 返回. 如果沒有, 執行 step 2

2. 如果obj的class 有這個屬性, 返回. 如果沒有, 執行step 3.

3. 如果在objclass 的父類有這個屬性, 返回. 如果沒有, 繼續執行3, 直到訪問完所有的父類. 如果還是沒有, 執行step 4.

4. 執行obj.__getattr__方法.

通過以下**可以驗證:

class

a(object):

a = 'a'

class

b(a):

b = 'b'

class

c(b):

class_field = 'class field'

def__getattr__

(self, f):

print('method {}.__getattr__ has been called.'.format(

self.__class__.__name__))

return f

c = c()

print c.a

print c.b

print c.class_field

print c.c

輸出:

a

bclass field

method

c.__getattr__

hasbeen

called.

c

ps: python裡的attribute與property不同, 當使用了property裡, property的解析優先順序最高. 詳見blog:從attribute到property.

web頁面的訪問過程

1,瀏覽器首先會查詢本機的系統,獲取主機名對應的ip位址。2,若本機查詢不到相應的ip位址,則會發起dns請求,獲取主機名對應的ip位址。3,使用查詢到的ip位址,直接訪問目標伺服器。首先說說訪問目標位址的兩種方式 第一,使用目標ip位址訪問。比如你可以直接在瀏覽器中輸入ip位址而直接訪問它的主機。...

Tomcat配置以及網域名稱訪問過程

在tomcat的安裝目錄中找到conf下的server.xml 配置預設啟動的埠 網域名稱 如何進行訪問 輸入網域名稱之後檢查本機的c windows system32 drivers etc hosts配置檔案下有沒有這個網域名稱對映 如果有直接對應的ip位址,在這個位址中,有我們需要訪問的web...

乙個url完整的訪問過程

乙個url完整的訪問過程 iii.資源路徑 question 554991 如果網路位址不是ip位址通過dns網域名稱解析將該系統解析成ip位址 a 開啟瀏覽器,輸入乙個網域名稱 電腦會發出乙個dns請求到本地的伺服器,本地dns服務一般都是你的 網路接入服務商提供,b 查詢www.163.com ...