我想用模运算扩展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
语句?你知道吗
Python根本不会进入你的
__init__
。timedelta类定义了__new__
,正如您在the source code中看到的那样,错误发生在那里-这就是为什么您在回溯中看不到代码的原因。你知道吗(还要注意的是
self = timedeltas[0]
除了重新绑定本地名称之外,根本不做任何事情,因此即使解决了init问题,代码也不会工作。)相关问题 更多 >
编程相关推荐