2016-04-26 16 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