Python中__format__方法未被调用问题求助
为什么自定义的__format__方法从未被调用?
你的问题核心很直接:你在Data类里写的__format__方法根本没被用到过。
看你的代码,所有格式化操作都是针对datetime.datetime类型的now变量——不管是{now}、{now:Bart}还是.format(now),都是在调用datetime对象自带的__format__方法,和你写的Data类完全无关,自然你的自定义方法不会被触发。
验证方法
在run方法里加两行格式化Data实例的代码,比如:
print(f'7---> {self}') print(f'8---> {self:my_format}')
运行后就能看到你的__format__方法被调用,控制台会输出你写的---> my_format和对应的返回值。
如果想自定义datetime的格式化
如果你的需求是让datetime对象用你自定义的格式,有两种简单思路:
- 继承
datetime.datetime类,重写它的__format__方法 - 让
Data类包装datetime对象,在自己的__format__里处理格式逻辑
比如第二种思路的示例代码:
import locale import datetime LOCALE = "fr_CA.utf-8" class Data: def __init__(self): locale.setlocale(locale.LC_ALL, LOCALE) self.now = datetime.datetime.now() def __format__(self, format_spec): print("---> " + format_spec) # 自定义datetime格式逻辑 if format_spec == 'dt_fmt': return self.now.strftime("%x %X") if not format_spec: return "A formatted Foo" return f"A formatted Foo, but also {format_spec}!" def run(self): # 格式化Data实例,触发自定义__format__ print(f'7---> {self}') print(f'8---> {self:dt_fmt}') print(f'9---> {self:custom_text}') if __name__ == "__main__": data = Data() data.run()
运行结果会是:
---> 7---> A formatted Foo ---> dt_fmt 8---> 2023-09-20 09:13:36 ---> custom_text 9---> A formatted Foo, but also custom_text!
内容的提问来源于stack exchange,提问作者Vincent Rivoire
相关产品推荐
相关产品推荐

