建立乙個新的擁有一些額外功能的例項屬性型別,比如型別檢查。
# descriptor attribute for an integer type-checked attribute
class string(object):
def __init__(self, name):
self.name = name
def __get__(self, instance, cls):
if instance is none:
return self
else:
return instance.__dict__[self.name]
def __set__(self, instance, value):
if not isinstance(value, str):
raise typeerror('expected an str')
instance.__dict__[self.name] = value
def __delete__(self, instance):
del instance.__dict__[self.name]
class point:
name1 = string('name1')
name2 = string('name2')
def __init__(self, name1, name2):
self.name1 = name1
self.name2 = name2
if __name__ == "__main__":
p = point("bo", "yun")
print(p.name1)
print(p.name2)
乙個描述器就是乙個實現了三個核心的屬性訪問操作(get, set, delete)的類, 分別為 _get_() 、_set_() 和 _delete_() 這三個特殊的方法。 這些方法接受乙個例項作為輸入,之後相應的操作例項底層的字典。
作為輸入,描述器的每乙個方法會接受乙個操作例項。 為了實現請求操作,會相應的操作例項底層的字典(__dict__屬性)。 描述器的 self.name 屬性儲存了在例項字典中被實際使用到的key。
描述器的乙個比較困惑的地方是它只能在類級別被定義,而不能為每個例項單獨定義。
#例如
class point:
def __init__(self, x, y):
self.x = string('name1') # no! must be a class variable
self.y = string('name2')
self.x = x
self.y = y
自定義乙個python日誌類
本文介紹如何寫乙個python日誌類,用來輸出不同級別的日誌資訊到不同的日誌檔案裡。1 將不同級別的日誌輸出到不同的日誌檔案裡,方便自己排查問題。2 生成的日誌放在專案根目錄的logs資料夾裡 3 日誌類支援debug,info,warning,error,critical五種級別日誌。4 日誌輸出...
自定義乙個vector向量類
c 標準模板庫stl給出了vector,list,deque,stack,set,map等模板類,平時我們直接使用居多,對於類內部怎麼實現不在意。現在以向量類vector為例,簡單自定義 其uml vetor 陣列名ele t 陣列目前大小size int 陣列容量cap int vector 用指...
JS自定義乙個Map類
例子1 定義簡單map function getmap map get function key map remove function key map keyset function if ret else return map var map getmap map.put 395 12,21,5...