我正在尝试使我的一个库与 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
变量,它确实有这个方法。但是,如果通过减去两个 datetime.datetime
值生成新的 timedelta
对象,则生成的对象中缺少该方法。
出了什么问题,我该如何解决?
最佳答案
datetime
模块完全用 C 语言编写。
这包括从另一个对象中减去一个 datetime.datetime
对象的函数。该函数——称为 new_delta()
——直接实例化 PyDateTime_DeltaType
,它是原始的 datetime.timedelta
类(用 C 编写)。它不会注意到您已将 datetime.timedelta
重新绑定(bind)到 Python 领域中您自己的类。
我没有看到任何简单的解决方法。
关于python - 猴子修补 'datetime' 产生奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7583867/