[英]Can you overload the Python 3.6 f-string's “operator”?
在Python 3.6中,您可以使用以下f字符串 :
>>> 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
)
是的 ,但是使用__format__
,而不是__fstr__
。
f
-strings不是以前格式化字符串的方法的改革。 相反,它建立在已有的協議之上。
從引入它們的PEP 0498開始 , 代碼等效 :
未指定用於實現f字符串的確切代碼。 但是,保證轉換為字符串的任何嵌入值都將使用該值的
__format__
方法。 這與str.format()
用於將值轉換為字符串的機制相同。
然后再次,在格式說明符中 :
一旦評估了格式說明符中的表達式(如果需要),f-string計算器就不會解釋格式說明符。 就像在
str.format()
,它們只是傳遞給正在格式化的對象的__format__()
方法。
所以,他們沒有新的特殊方法。 您需要定義一個__format__
方法,該方法接受規范並返回格式正確的字符串。
正如__format__
上的文檔也描述:
由
format()
內置函數調用,並通過擴展, 評估格式化的字符串文字和str.format()
方法,以生成對象的“格式化”字符串表示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.