我正在考虑创建一个python datetime-subclass,它在创建时提供默认时区。
为了简化这个问题,我们假设总是想要将我的日期时间硬编码为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)
运行第一个方法为我提供了我期望的日期时间对象:
>>> 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
关于这里发生了什么的任何想法?
谢谢!
答案 0 :(得分:0)
提供解决方案,如Why can't I subclass datetime.date?中所述,为了完整起见,感谢dano链接。
由于datetime对象是不可变的,因此必须在new中实现额外的功能:
class Foo(datetime.datetime):
def __new__(cls, *args, **kwargs):
kwargs['tzinfo'] = dateutil.tz.tzutc()
return datetime.datetime.__new__(cls, *args, **kwargs)