我正在研究如何创建python datetime子类,它在创建时提供了一个默认时区。
为了保持这个问题的简单性,让我们假设我总是希望在UTC中对我的日期时间进行硬编码。
我不明白为什么会发生以下情况:
import datetime, dateutil.tz
def foo(*args, **kwargs):
kwargs['tzinfo'] = dateutil.tz.tzutc()
return datetime.datetime(*args, **kwargs)但以下几点不起作用:
class Foo(datetime.datetime):
def __init__(self, *args, **kwargs):
kwargs['tzinfo'] = dateutil.tz.tzutc()
super(Foo, self).__init__(*args, **kwargs)运行第一个方法将给出我期望的datetime对象:
>>> foo(2012, 11, 10)
datetime.datetime(2012, 11, 10, 0, 0, tzinfo=tzutc())
>>> foo(2012, 11, 10).tzinfo is None
False但是创建Foo类的实例似乎并没有设置tzinfo对象。
>>> Foo(2012, 11, 10)
Foo(2012, 11, 10, 0, 0)
>>> Foo(2012, 11, 10).tzinfo is None
True对这里发生了什么有什么想法吗?
谢谢!
发布于 2014-07-26 02:53:09
为了完整性而提供解决方案,正如Why can't I subclass datetime.date?中所解释的,这要感谢链接的dano。
额外的功能必须在new中实现,因为datetime对象是不可变的:
class Foo(datetime.datetime):
def __new__(cls, *args, **kwargs):
kwargs['tzinfo'] = dateutil.tz.tzutc()
return datetime.datetime.__new__(cls, *args, **kwargs)https://stackoverflow.com/questions/24966806
复制相似问题