3

我正在尝试使我的库之一与 Python 2.6 兼容。它使用了datetime.timedelta.total_seconds在 2.7 中添加的方法,所以为了使它与 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值来生成新对象,则结果对象中缺少该方法。

出了什么问题,我该如何解决?

4

1 回答 1

3

datetime模块完全用 C 编写。

这包括datetime.datetime从另一个对象中减去一个对象的函数。该函数——称为new_delta()——直接实例化PyDateTime_DeltaType原始datetime.timedelta类(用 C 编写)。它不会注意到您已经datetime.timedelta在 Python 领域反弹到您自己的课程。

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

于 2011-09-28T13:36:04.763 回答