猴子修补“ 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