描述符通過描述符協議實現,任何實現或部分實現以下方法的類,都可以作為描述符使用。
def__get__
(self, instance, owner):
...def__set__
(self, instance, value):
...def__delete__
(self, instance):
....
__get__ 方法接收三個引數:self為描述符例項自身; instance指訪問屬性所屬的例項;owner指描述符例項附加到的類。
__set__方法的前兩個引數於__get__方法相同,第三個引數value為需要賦值的屬性。
__delete__方法的兩個引數與__get__方法的前兩個引數相同。
定義乙個簡單的描述符,和描述符的託管類,進行測試
classdescriptor:
def__init__
(self):
pass
def__get__
(self, instance, owner):
return
self, instance, owner
def__set__
(self, instance, value):
(self, instance, value)
def__delete__
(self, instance):
(self, instance)
class
classa(object):
descriptor = descriptor()
將classa例項化為物件a,並分別從例項、類層面讀取描述符。
觀察執行結果:當通過例項訪問時,instance為當前描述符託管的例項,而通過類訪問時,instance為none。但是無論通過例項或類訪問,owner都為描述符所屬的類。
#例項化為物件a
a =classa()
#從例項取值
(a.descriptor)
#(<__main__.descriptor object at 0x10c157438>, <__main__.classa object at 0x10c1574a8>, )
#從類取值
(classa.descriptor)
#(<__main__.descriptor object at 0x10c157438>, none, )
對描述符的進行賦值,觀察執行結果:可以發現第乙個引數是描述符自身,第二個引數是描述符託管的例項,第三個引數是賦值給描述符的值
#對描述符進行賦值
a.descriptor = 2
#<__main__.descriptor object at 0x10f0b1518><__main__.classa object at 0x10f0b1588> 2
上面就是基本的描述符協議實現。
mysql 檔案描述符 檔案描述符
toc 首先,linux的世界裡一切皆為檔案,無論是裝置還是乙個socket連線。檔案又可分為 普通檔案 目錄檔案 鏈結檔案和裝置檔案。檔案描述符 file descriptor 是核心為了高效管理已被開啟的檔案所建立的索引,其是乙個非負整數 通常是小整數 用於指代被開啟的檔案,所有執行i o操作的...
檔案描述符
檔案描述符 是個很小的正整數,它是乙個索引值,指向核心為每乙個程序所維護的該程序開啟檔案的記錄表。檔案描述符的優點 相容posix標準,許多 linux 和unix 系統呼叫都依賴於它。檔案描述符的缺點 不能移植到unix以外的系統上去,也不直觀。基於檔案描述符的輸入輸出函式 open 開啟乙個檔案...
標籤描述符
標籤庫描述符 標籤庫描述符檔案是乙個以 tld 結尾的標準xml文件,來記錄標籤庫包含的標籤和屬性 是標籤庫描述符的根元素,包含的12個子元素 1.標籤庫的文字描述 2.指定標籤庫的版本 3.為標籤制定簡短名字 4.定義乙個url用於唯一的表示此標籤庫 a 為自定義標籤提供乙個文字描述 b 為標籤指...