1 回答

TA貢獻1775條經驗 獲得超8個贊
IIRC,格式規范迷你語言可以訪問對象的屬性,但不能調用方法。它假定您正在尋找名稱為“lower()”的屬性,包括括號。
value必須是字符串嗎?也許您可以創建一個帶有 a 的字符串子類,@property它返回其自身的小寫版本。例如:
class StringEx(str):
@property
def lowercase(self):
return self.lower()
x = StringEx("Hello, World!")
s = "Lowercase: {value.lowercase}"
print(s.format(value=x))
結果:
Lowercase: hello, world!
如果您希望有很多不同的格式字符串并且不想為每個字符串方法實現一個屬性,您可以通過覆蓋一次性覆蓋所有零參數方法__getattr__:
class StringEx(str):
def __getattr__(self, name):
if name.endswith("()"):
return getattr(self, name[:-2])()
else:
raise AttributeError
x = StringEx("HeLlO, WoRlD!")
format_strings = [
"Regular: {value}",
"Lowercase: {value.lower()}",
"Uppercase: {value.upper()}",
"Title: {value.title()}"
]
for s in format_strings:
print(s.format(value=x))
結果:
Regular: HeLlO, WoRlD!
Lowercase: hello, world!
Uppercase: HELLO, WORLD!
Title: Hello, World!
添加回答
舉報