我在Django中处理了一些日期模拟问题,最后的障碍(我希望)是以下情况。我有一个FakeDate类,它从datetime.date
派生,它模拟了这个类。在
FakeDate类按预期工作,但是我在向FakeDate添加datetime.timedelta
时遇到一个问题,因为它返回一个真正的datetime.date
,而不是mock。这一点很重要,因为在第三方库的其他地方有一个isinstance(value, datetime.date)
检查,在使用timedelta时总是失败。在
>>> import mock
>>> import datetime
>>>
>>> class FakeDate(datetime.date):
... @classmethod
... def today(cls):
... return cls(1999, 12, 31)
...
>>> FakeDate.today()
FakeDate(1999, 12, 31)
>>> FakeDate(2000, 1, 1)
FakeDate(2000, 1, 1)
>>> FakeDate(1999, 12, 31) + datetime.timedelta(days=1)
datetime.date(2000, 1, 1)
我希望FakeDate+timedelta加法返回FakeDate对象而不是日期时间.日期对象-我想这需要某种方式修补时间差-但我该如何/在哪里可以做到呢?在
将
__add__
方法添加到FakeDate()
类:演示:
^{pr2}${{cd2>我们只需添加一个实例就可以了。在
你只需要在你的
FakeDate
类中定义一个__add__
方法它是控制+
操作符行为的方法。在注意,这只处理
fakedate + timedelta
情况。如果您希望timedelta + fakedate
也返回FakeDate
的实例,那么还需要定义__radd__
方法(与__add__
相同的代码)。在有关与运算符关联的
__magic_methods__
的详细信息,请参见http://docs.python.org/2/reference/datamodel.html#emulating-numeric-types。在相关问题 更多 >
编程相关推荐