aid*_*ald 12 python python-3.x python-3.6 f-string
在Python 3.6中,您可以使用以下f字符串:
>>> date = datetime.date(1991, 10, 12)
>>> f'{date} was on a {date:%A}'
'1991-10-12 was on a Saturday'
Run Code Online (Sandbox Code Playgroud)
我想重载接收'%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
)
Run Code Online (Sandbox Code Playgroud)
Jim*_*ard 13
是的,但通过使用__format__,而不是__fstr__.
f-strings不是以前格式化字符串的方法的改革.相反,它建立在已有的协议之上.
从引入它们的PEP 0498开始,代码等效:
未指定用于实现f字符串的确切代码.但是,保证转换为字符串的任何嵌入值都将使用该值的
__format__方法.这str.format()与将值转换为字符串的机制相同.
然后再次,在格式说明符中:
一旦评估了格式说明符中的表达式(如果需要),f-string计算器就不会解释格式说明符.就像在
str.format(),它们只是被传递给__format__()被格式化的对象的方法.
所以,他们没有新的特殊方法.您需要定义一个__format__获取规范并返回格式正确的字符串的方法.
正如文档中__format__所描述的那样:
由
format()内置函数调用,并通过扩展,评估格式化的字符串文字和str.format()方法,以生成对象的"格式化"字符串表示.
| 归档时间: |
|
| 查看次数: |
653 次 |
| 最近记录: |