二次加工系統的標準類型 包裝與授權
阿新 • • 發佈:2018-08-13
標準類型 賦值 時間顯示 get 定義 加工 完成 自動 import
# 二次加工系統的標準類型 # 1、通過繼承系統的類來完成包裝, 定制自己的數據類型 class List(list): # 定義了一個List類,繼承自系統中的list類 def append(self, p_object): # 重寫了append方法,改為只能添加字符串 if type(p_object) is str: super().append(p_object) # 因為重寫了append,這裏要使用原append方類時需要調用父類的append方法,使用super()調用 else:print(‘只能添加字符串類型‘) def show_middle(self): # 定義了一個新的方法,用於查找列表中中間的那一個元素 mid_index = int(len(self) / 2) # 計算出中間元素的index值 return self[mid_index] # 返回中間的元素 l1 = List(‘HelloWorld‘) # 使用我們定義的List類創建列表 l1.append(1111) # 當append的元素為數字時,不能添加成功,提示只能添加字符串類型 l1.append(‘ok‘) # 只有append字符串時,才能添加成功print(l1.show_middle()) # 打印自己定義的show_middle方法返回的結果 # 2、授權:也是一種包裝,但不是通過繼承來做,而是通過覆蓋__getattr__來做 import time class Open: def __init__(self, filename, mode=‘r‘, encoding=‘utf-8‘): self.file = open(filename, mode, encoding=encoding) # 獲取打開文件的句柄賦值給self.file self.mode = mode self.encoding= encoding def write(self, content): # 我們定義了一個write方法 t = time.strftime(‘%Y-%m-%d %X‘) # 定義了一個時間顯示格式 self.file.write(‘%s %s‘ % (t, content)) # 寫入內容時自動加上時間 def __getattr__(self, item): # 相當於def __getattr__(f1實例對象, ‘read‘): return getattr(self.file, item) # 通過getattr返回self.file, item的內存地址並return f1 = Open(‘1.txt‘, ‘r+‘) f1.write(‘111111111\n‘) # 這裏調用的是我們自己定義的write方法 f1.write(‘222222222\n‘) f1.write(‘333333333\n‘) print(f1.read()) # 因為f1的實例及父類Open中沒有read屬性,所以會執行 __getattr__方法
二次加工系統的標準類型 包裝與授權