1. 程式人生 > >Python — magic method

Python — magic method

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