迭代器協議,資料描述符

2021-08-19 23:48:10 字數 1427 閱讀 5998

# 迭代器協:先呼叫物件__iter__方法 然後每次取值呼叫__next__方法

# for迴圈 可以捕獲迭代器丟擲的stopiteration異常 結束呼叫__next__

classfoo:

def__init__(self,x):

self.x = x

def__iter__(self): # 使用for迴圈 首先會呼叫__iter__方法

returnself

def__next__(self): # 呼叫__next__方法乙個乙個取值

ifself.x == 4:

raisestopiteration

# 結束條件 丟擲異常

self.x += 1

returnself.x

f = foo(1)

foriinf: # for會捕獲異常

print(i)

# 資料描述符:至少有__get__方法 __set__方法

# 優先順序:類屬性 資料描述符 例項描述符(自己的屬性) 非資料描述符 找不到

# 非資料描述符:__get__方法

# 優先順序:例項高於非資料描述符

classfoo:

def__set__(self, instance, value):

print("__set__")

def__get__(self, instance, owner):

print("__get__")

def__delete__(self, instance):

print("__delete__")

classbar:

x = foo()

# print(bar.x)

# 觸發foo foo沒有返回值

# bar.x = 1

# 類呼叫優先順序更高 底層字典覆蓋操作

# print(bar.__dict__)

# 'x': 1,

b = bar()

b.x # 觸發foo get方法

delb.x # __delete__

神奇的描述符(一) 描述符協議的實現

描述符通過描述符協議實現,任何實現或部分實現以下方法的類,都可以作為描述符使用。def get self,instance,owner def set self,instance,value def delete self,instance get 方法接收三個引數 self為描述符例項自身 ins...

mysql 檔案描述符 檔案描述符

toc 首先,linux的世界裡一切皆為檔案,無論是裝置還是乙個socket連線。檔案又可分為 普通檔案 目錄檔案 鏈結檔案和裝置檔案。檔案描述符 file descriptor 是核心為了高效管理已被開啟的檔案所建立的索引,其是乙個非負整數 通常是小整數 用於指代被開啟的檔案,所有執行i o操作的...

ES5 資料屬性描述符和訪問描述符

物件是乙個屬性集合,物件的基本特徵是屬性名 name 和屬性值 value es5 增加了屬性描述符,可以更細膩的控制屬性的不同操作。屬性描述符有 configurable writable 和 enumerable。屬性描述符通常和 object.defineproperty object.def...