其他分享
首页 > 其他分享> > 猴子修补“ datetime”产生奇怪的结果

猴子修补“ 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变量,它确实具有此方法.但是,如果通过减去两个datetime.datetime值生成了一个新的timedelta对象,则该方法从结果对象中丢失.

怎么了,我该如何解决?

解决方法:

datetime模块完全用C编写.

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

我看不到任何简单的解决方法.

标签:python-datetime,monkeypatching,datetime,python
来源: https://codeday.me/bug/20191207/2087243.html