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!
添加回答
举报