1. 程式人生 > >二次加工系統的標準類型 包裝與授權

二次加工系統的標準類型 包裝與授權

標準類型 賦值 時間顯示 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__方法

二次加工系統的標準類型 包裝與授權