猴子修补'datetime'会产生奇怪的结果

时间:2011-09-28 13:19:40

标签: python datetime monkeypatching python-datetime

我正在尝试使我的一个库与Python 2.6兼容。它使用在2.7中添加的方法datetime.timedelta.total_seconds,所以为了使它与2.6一起使用,我想将它修改为timedelta,如下所示:

import datetime

if not hasattr(datetime.timedelta, 'total_seconds'):

    class timedelta(datetime.timedelta):
        def total_seconds(self):
            return self.days * 86400.0 + self.seconds + self.microseconds * 1e-6

    datetime.timedelta = timedelta

这确实在某些情况下有效,例如:如果我创建一个timedelta变量,它确实有这个方法。但是,如果通过减去两个timedelta值生成新的datetime.datetime对象,则生成的对象中缺少该方法。

出了什么问题,如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

datetime模块完全用C语言编写。

这包括从一个datetime.datetime对象中减去另一个new_delta()对象的函数。该函数 - 称为PyDateTime_DeltaType - 直接实例化datetime.timedelta,这是原始的datetime.timedelta类(用C语言编写)。它不会注意到你在Python-land中将{{1}}反弹到你自己的班级。

我没有看到任何简单的解决方法。