在Python 3.6中,您可以使用f-strings,如:
>>> date = datetime.date(1991, 10, 12)
>>> f'{date} was on a {date:%A}'
'1991-10-12 was on a Saturday'
我想重载接收上面'%A'
的方法。可以吗?
例如,如果我想在datetime
周围编写一个哑包装器,我可能会认为这种重载看起来像:
class MyDatetime:
def __init__(self, my_datetime, some_other_value):
self.dt = my_datetime
self.some_other_value = some_other_value
def __fstr__(self, format_str):
return (
self.dt.strftime(format_str) +
'some other string' +
str(self.some_other_value
)
答案 0 :(得分:13)
是,但使用的是__format__
,而不是__fstr__
。
f
- 字符串不是以前格式化字符串的方法的改革。相反,它建立在已有的协议之上。
引自他们的PEP 0498,Code equivalence:
未指定用于实现f字符串的确切代码。但是,保证转换为字符串的任何嵌入值都将使用该值的
__format__
方法。这与str.format()
用于将值转换为字符串的机制相同。
然后再次在Format Specifiers:
一旦评估了格式说明符中的表达式(如果需要),f-string计算器就不会解释格式说明符。就像在
str.format()
中一样,它们只是传递给正在格式化的对象的__format__()
方法。
因此,他们没有新的特殊方法。您需要定义一个__format__
方法,该方法接受规范并返回格式正确的字符串。
正如__format__
上的文档也描述:
由
format()
内置函数调用,并通过扩展,评估格式化字符串文字和str.format()
方法,生成“格式化”字符串表示形式一个对象。