2016-04-26 15 views
0

我正在玩類,並創建了一個到我的腳本的部分時間。Python類:更新調用時的實例值

import datetime 


class Timer(object): 

    def __init__(self, *args, **kwargs): 
     self.StartTime = datetime.datetime.now() 
     self.TimeElapsed = self.timedif(datetime.datetime.now(), self.StartTime) 

    def hms_string(self, sec_elapsed): 
     h = int(sec_elapsed/(60 * 60)) 
     m = int((sec_elapsed % (60 * 60))/60) 
     s = sec_elapsed % 60 
     return "{}:{:>02}:{:>05.2f}".format(h, m, s) 

    def timedif(self, end_datetime, start_datetime): 
     seconds_elapsed = (end_datetime - start_datetime).total_seconds() 
     return self.hms_string(seconds_elapsed) 

我想它做的是打印的,每當Timer.TimeElapsed被實例化以來StartTime經過的時間量。當然,它的作用是打印00:00:00

如何修改我的班級,以便在撥打Timer.TimeElapsed時使用實際當前時間與StartTime進行比較,而不是班級被調用的時間?

+2

爲什麼不製作一個'time_elapsed'方法(注意:https://www.python.org/dev/peps/pep-0008/),只要它被調用就計算差異? – jonrsharpe

+0

@jonrsharpe剛剛嘗試過;似乎也在做同樣的事情。 – crld

+0

這似乎不大可能,但沒有[mcve],很難說你做錯了什麼。 – jonrsharpe

回答

0

你可以使用一個方法,而不是:

import datetime 
import time 

class Timer(object): 
    def __init__(self, *args, **kwargs): 
     self.StartTime = datetime.datetime.now() 
     self.TimeElapsed = self.timedif(datetime.datetime.now(), self.StartTime) 

    def hms_string(self, sec_elapsed): 
     h = int(sec_elapsed/(60 * 60)) 
     m = int((sec_elapsed % (60 * 60))/60) 
     s = sec_elapsed % 60 
     return "{}:{:>02}:{:>05.2f}".format(h, m, s) 

    def timedif(self, end_datetime, start_datetime): 
     seconds_elapsed = (end_datetime - start_datetime).total_seconds() 
     return self.hms_string(seconds_elapsed) 

    def time_elapsed(self): 
     return self.timedif(datetime.datetime.now(), self.StartTime) 

t = Timer() 
print "time elapsed from variable: {}".format(t.TimeElapsed) 
time.sleep(1) 
print "time elapsed from variable: {}".format(t.TimeElapsed) 

t = Timer() 
print "time elapsed from method: {}".format(t.time_elapsed()) 
time.sleep(1) 
print "time elapsed from method: {}".format(t.time_elapsed()) 

輸出:

time elapsed from variable: 0:00:00.00 
time elapsed from variable: 0:00:00.00 
time elapsed from method: 0:00:00.00 
time elapsed from method: 0:00:01.00 
+0

謝謝你的例子! – crld

1

你可以用@property替換TimeElapsed

@property 
def TimeElapsed(self): 
    return self.timedif(datetime.datetime.now(), self.StartTime) 

不要忘記從你__init__方法去除self.TimeElapsed

另請注意,根據pep8,變量和方法名稱不應位於CamelCase中。你的新房產將被命名爲time_elapsed

-1

當您引用Timer.TimeElapsed你引用多數民衆贊成在類實例化時創建一個類屬性。

+0

爲什麼選擇投票? – dojafoja