簡體   English   中英

你可以重載Python 3.6 f-string的“運算符”嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM