在覈心,你所要求的是理解靜態方法和普通方法之間的區別,以及OOP的優點。
可以在不實例化類的情況下調用靜態方法,例如在第一個示例中。這使您可以將單個標題(類)下的相關功能分組,但從技術上講它不是OOP。
但是,由於沒有實例,因此靜態方法沒有要處理的實例數據。
類實例允許您跟蹤對象特定的數據,並在您的方法中對其執行操作。
例如:
import time
class Stopwatch:
def __init__(self, name, start):
self.name = name
self.time = start
self.active = False
def start(self):
self.active = True
def stop(self):
self.active = False
def reset(self, time):
self.time = time
def isComplete(self):
return (self.time == 0)
def tick(self):
if self.active:
self.time -= 1
print(self.name+": ",self.time)
if self.time == 0:
print("Timer of " + self.name + " has reached zero!")
self.stop()
watchA = Stopwatch("A", 10)
watchB = Stopwatch("B", 5)
watchA.start()
watchB.start()
while (not watchA.isComplete()) or (not watchB.isComplete()):
time.sleep(1)
watchA.tick()
watchB.tick()
運行此輸出:
A: 9
B: 4
A: 8
B: 3
A: 7
B: 2
A: 6
B: 1
A: 5
B: 0
Timer of B has reached zero!
A: 4
A: 3
A: 2
A: 1
A: 0
Timer of A has reached zero!
通知如何每個表的時間是單獨,儘管使用相同的代碼跟蹤。這不可能使用靜態方法,因爲數據不是附加到類,而是附加到Instanced對象本身。
第一,「第二」不綁定到類或instace。 –
這是一個常見問題,我喜歡這篇文章的答案:http://stackoverflow.com/questions/12179271/python-classmethod-and-staticmethod-for-beginner。 – jonnybazookatone
你是怎麼調用這些方法的? –