屬性查詢過程

2021-08-25 05:24:19 字數 1291 閱讀 8448

import numbers

class intfield:

# 資料屬性描述符 ,實現了get和set

def __get__(self, instance, owner):

return self.value

def __set__(self, instance, value):

if not isinstance(value, numbers.integral):

raise valueerror('argument must be digital')

self.value = value

def __delete__(self, instance):

pass

class nonedataintfield:

# 非資料屬性描述符,只實現了其中一種方法

def __get__(self, instance, owner):

pass

class user:

age = intfield()

if __name__ == '__main__':

user = user()

user.age = 'abc'

# print(user.birthday.year)

# print(user.age)

print(user.age)

如果user 是某個類的例項,那麼user.age(以及等價的getattr(user, 'age'))

首先呼叫 __getattribute__。如果類定義了__getattr__方法,那麼在__getattribute__丟擲attributeerror的時候就會呼叫到__gettattr__,而對於描述符(__get__)的呼叫, 則發生在__getattribute__內部的。

user = user(),那麼user.age順序如下:

1)如果'age'是出現在user或者其基類的__dict__中, 且age是data descriptor,那麼呼叫其__get__方法,否則

2)如果'age』出現在user的__dict__中, 那麼直接返回user.__dict__['age'],否則

3)如果'age'出面在user或者其基類的__dict__中,

3.1)如果age是none-data descriptor,那麼呼叫其__get__方法,否則

3.2)返回user.__dict__['age']

4)如果user有__getattr__方法, 呼叫__getattr__方法,否則

5)丟擲attributeerror

Elasticsearch查詢過程

客戶端向集群中的某個節點 假設節點1 發起查詢請求,節點1會建立乙個from size大小的佇列 from 偏移量,size 要取回的文件個數 節點1向集群中所有其他的分片 主或從 發起查詢請求,每個分片也會建立乙個from size大小的佇列,並將查詢結果新增到佇列中。其他分片將查詢到的文件id和...

DNS查詢過程

dns domain name system 將網域名稱和ip位址相互對映的乙個分布式資料庫服務。dns使用的是網路查詢,使用的埠是53號埠 通常dns是以udp資料傳輸協議來查詢的,當沒有查詢到完整的資訊時,就會再次以tcp這個協議來重新查詢。所以在啟動dns時,會同時啟動tcp和udp的53號埠...

DNS查詢過程

dns查詢過程 假設www.abc.com的主機要查詢www.xyz.abc.com的伺服器ip位址。知識點2 域 abc.com是乙個域,它可以劃分為多個區域,如abc.com和xyz.abc.com 步驟遞迴查詢 第二步 上一步無法找到,去dns本地伺服器 即域伺服器 查詢,其本質是去區域伺服器...