Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 添加+;=支持datetime.time_Python_Python 2.7_Datetime_Time - Fatal编程技术网

Python 添加+;=支持datetime.time

Python 添加+;=支持datetime.time,python,python-2.7,datetime,time,Python,Python 2.7,Datetime,Time,Python的datetime.time类缺少带有datetime.timedelta的+=功能。我试图通过创建派生类Time来解决这个问题。然后我使用datetime+=并获得datetime.time() 但是,我不知道如何传递父类值。我试图实现copy方法,如下所示,但出现错误: AttributeError: attribute 'hour' of 'datetime.time' objects is not writable 我目前的执行情况: from datetime impor

Python的
datetime.time
类缺少带有
datetime.timedelta
+=
功能。我试图通过创建派生类
Time
来解决这个问题。然后我使用
datetime
+=
并获得
datetime.time()

但是,我不知道如何传递父类值。我试图实现
copy
方法,如下所示,但出现错误:

AttributeError: attribute 'hour' of 'datetime.time' objects is not writable
我目前的执行情况:

from datetime import datetime, timedelta, time

class Time(time):
    def copy(self,other):
        self.hour = other.hour
        self.minute = other.minute
        self.second = other.second
        self.microsecond = other.microsecond

    def __add__(self,other):
        if isinstance(other,timedelta):
            dt = toDatetime(self)
            dt += other
            t = Time()
            t.copy(dt.time())
            return t

如何复制父类的值?另外,有没有更好的方法可以让我获得对相当于
datetime.time的
+=
的支持,而我只是把这一切都搞错了?

要创建副本,请将时间组件传递给构造函数:


datetime.time()
对象在其他方面是不可变的;您可以使用它们来创建一个新实例,替换特定的组件,但由于您正在构造一个新的子类实例,只需传入组件就更容易了。

datetime.time()
对象不支持带有
timedelta
的算术,因为它们没有处理溢出的日期组件。例如,
time(23,59,59)+timedelta(hours=1)
的结果会是什么?其次,
datetime.time()
对象是不可变的。我明白了。所以不变性就是我在这里遇到的砖墙。看起来我必须以另一种方式实现它。为什么不将组件(小时、分钟、秒、微秒)传递给构造函数呢<代码>时间(dt.小时,dt.分钟,dt.秒,dt.微秒)
好主意!这很有效。回答一下,我就接受。
t = Time(dt.hour, dt.minute, dt.second, dt.microsecond)