Python — magic method
阿新 • • 發佈:2019-02-27
ack 作用 當前 輸出 new 否則 狀態機 初始化 的區別
Python 中內置的特定的方法, 這些方法在進行特定的操作時,會自動被調用。
__init__(self, [ ]) # 類的構造函數, 用於初始化實例變量
__new__(cls, [ ]) # 類的內置方法
__del__(self) # 當對象的引用為 0 時調用 該方法, 並不是del 時調用該方法
算術運算的 內置方法。對象可以進行算術運算,可通過修改這些方法,改變對象的行為
定義一個定時器的類,並通過重載其內部方法實現,定時器開始,結束,結果顯示,及定時器對象的 加 (+,將兩個定時器的時間相加並顯示)操作。
需要註意,三個類方法在實例化後的調用順序,如在start() 調用之前調用 stop()、未調用stop()而調用 + 操作,通過實例變量 message,對當前操作進度進行記錄,並通過對時間的判斷進行錯誤提醒,有點類似於狀態機的狀態碼。
# 通過重定義內置方法 定制類 import datetime class Mytimer(): num = 0 def __init__(self): self.__class__.num += 1 self.start_time = 0 self.stop_time = 0 self.time_sec = 0 self.message = ‘未開始計時!‘ # 重定義 __str__ 以及 __repr__內置函數 用於控制輸出 def__str__(self): return self.message __repr__ = __str__ def __add__(self, time): if self.time_sec and time.time_sec: add_result = self.time_sec + time.time_sec self.message = ‘總共計時時間為:‘ + str(add_result) else: self.message= ‘計時未結束!‘ return self.message def start(self): self.start_time = datetime.datetime.now() print(‘計時開始!‘) self.message = ‘未結束計時!‘ def stop(self): if self.start_time: self.stop_time = datetime.datetime.now() delta_time = self.stop_time - self.start_time self.time_sec = delta_time.total_seconds() self.message = ‘計時結果為:‘ + str(self.time_sec) +‘S‘ print(‘計時結束!‘) else: print(‘Plz run start first!‘) t = Mytimer() t1 = Mytimer()
定義類方法時需要註意實例變量與 函數的局部變量的區別,由於函數的局部變量生存空間僅限於該函數內部,因此需要在函數之間調用的變量需要設置未實例變量。實例變量與類變量之間由於作用對象不同,相互沒有影響,類變量用於描述這個抽象類的屬性,而實例變量用於描述實例化對象的屬性。註意實例變量名與方法名不能相同,否則在__init__()初始化後會導致與變量名相同的函數被覆蓋。
。
Python — magic method