gpt4 book ai didi

Python:pytz 返回不可用的 __repr__()

转载 作者:行者123 更新时间:2023-11-28 18:55:10 25 4
gpt4 key购买 nike

据我了解,repr() 的目的是返回一个字符串,该字符串可用于作为 python 命令进行评估并返回相同的对象。不幸的是,pytz 似乎对这个函数不太友好,尽管它应该很容易,因为 pytz 实例是通过一次调用创建的:

import datetime, pytz
now = datetime.datetime.now(pytz.timezone('Europe/Berlin'))
repr(now)

返回:

datetime.datetime(2010, 10, 1, 13, 2, 17, 659333, tzinfo=<DstTzInfo 'Europe/Berlin' CEST+2:00:00 DST>)

它不能简单地复制到另一个 ipython 窗口并进行评估,因为它会在 tzinfo 属性上返回一个语法错误。

有没有什么简单的办法让它打印:

datetime.datetime(2010, 10, 1, 13, 2, 17, 659333, tzinfo=pytz.timezone('Europe/Berlin'))

'Europe/Berlin' 字符串在 repr() 的原始输出中已经清晰可见时?

最佳答案

import datetime
import pytz
import pytz.tzinfo

def tzinfo_repr(self):
return 'pytz.timezone({z})'.format(z=self.zone)
pytz.tzinfo.DstTzInfo.__repr__=tzinfo_repr

berlin=pytz.timezone('Europe/Berlin')
now = datetime.datetime.now(berlin)
print(repr(now))
# datetime.datetime(2010, 10, 1, 14, 39, 4, 456039, tzinfo=pytz.timezone("Europe/Berlin"))

请注意,夏天的 pytz.timezone("Europe/Berlin") 可能与夏天的 pytz.timezone("Europe/Berlin")) 不同冬天,由于夏令时。所以 monkeypatched __repr__ 并不是一直都是 self 的正确表示。但是在复制和粘贴到 IPython 中时它应该可以工作(极端极端情况除外)。


另一种方法是继承 datetime.tzinfo:

class MyTimezone(datetime.tzinfo):
def __init__(self,zone):
self.timezone=pytz.timezone(zone)
def __repr__(self):
return 'MyTimezone("{z}")'.format(z=self.timezone.zone)
def utcoffset(self, dt):
return self.timezone._utcoffset
def tzname(self, dt):
return self.timezone._tzname
def dst(self, dt):
return self.timezone._dst

berlin=MyTimezone('Europe/Berlin')
now = datetime.datetime.now(berlin)
print(repr(now))
# datetime.datetime(2010, 10, 1, 19, 2, 58, 702758, tzinfo=MyTimezone("Europe/Berlin"))

关于Python:pytz 返回不可用的 __repr__(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3838578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com