我想用模运算来扩展datetime
的timedelta
类。我还希望能够以TimeDelta
两种方式初始化结果类:
timedelta
,例如TimeDelta(seconds=5)
timedelta
,在这种情况下,TimeDelta
“接管”了该实例的属性。我尝试了以下方法:
import datetime
class TimeDelta(datetime.timedelta):
"""Extends datetime's timedelta class with a modulo operation."""
def __init__(self, *args, **kwargs):
timedeltas = [arg for arg in args if isinstance(arg, datetime.timedelta)]
if timedeltas:
self = timedeltas[0]
else:
super(TimeDelta, self).__init__(*args, **kwargs)
def __mod__(self, other):
return self.total_seconds() % other.total_seconds()
但是,如果我尝试以TimeDelta
第一种方式创建的实例,则会得到TypeError
:
In [1]: execfile('interval.py')
In [2]: time_delta = TimeDelta(datetime.timedelta(seconds=5))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-2-a0e79564603f> in <module>()
----> 1 time_delta = TimeDelta(datetime.timedelta(seconds=5))
TypeError: unsupported type for timedelta days component: datetime.timedelta
似乎该else
语句正在立即被调用,这是行不通的,因为timedelta
它不希望自身的实例作为其实例化中的参数。是这样吗 如果是这样,为什么不if
触发该语句?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句