只想回答乙個問題: 當編譯器要讀取obj.field
時, 發生了什麼?
看似簡單的屬性訪問, 其過程還蠻曲折的. 總共有以下幾個step:
1. 如果obj
本身(乙個instance )有這個屬性, 返回. 如果沒有, 執行 step 2
2. 如果obj
的class 有這個屬性, 返回. 如果沒有, 執行step 3.
3. 如果在obj
class 的父類有這個屬性, 返回. 如果沒有, 繼續執行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 ...