如何调用对象';是否从格式字符串中删除方法?(Python)
我想从模板字符串中调用字符串的lower方法。理想情况下,这看起来像如何调用对象';是否从格式字符串中删除方法?(Python),python,string,Python,String,我想从模板字符串中调用字符串的lower方法。理想情况下,这看起来像 string=“小写:{value.lower()}” 格式(值=…) 但是,这给了我一个错误,说AttributeError:'str'对象没有属性'lower()'(我理解为什么会出现此错误) 我想知道是否有办法做到这一点。我曾经研究过使用转换(比如调用repr)来调用{value!r}),但这并没有解决我的问题。我可以创建自定义转换说明符吗 (对于记录,string.format(value=value.lower()
string=“小写:{value.lower()}”
格式(值=…)
但是,这给了我一个错误,说AttributeError:'str'对象没有属性'lower()'
(我理解为什么会出现此错误)
我想知道是否有办法做到这一点。我曾经研究过使用转换(比如调用repr
)来调用{value!r}
),但这并没有解决我的问题。我可以创建自定义转换说明符吗
(对于记录,
string.format(value=value.lower())
在我的情况下不一定有效。)IIRC,格式规范迷你语言可以访问对象的属性,但不能调用方法。它假定您正在查找名为“lower()”的属性,包括括号
value
必须是字符串吗?也许您可以创建一个带有@属性的字符串子类,该属性返回其自身的小写版本。例如:
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!
Regular: HeLlO, WoRlD!
Lowercase: hello, world!
Uppercase: HELLO, WORLD!
Title: Hello, World!
如果您希望有许多不同格式的字符串,并且不希望为每个字符串方法实现一个属性,那么可以通过重写\uuuu getattr\uuu
一次性覆盖所有零参数方法:
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))
结果:
Lowercase: hello, world!
Regular: HeLlO, WoRlD!
Lowercase: hello, world!
Uppercase: HELLO, WORLD!
Title: Hello, World!
你是想用f字串吗?注意“f”前缀:f“Lowercase:{value.lower()}”
No,value将是传递到string.format(…)
中的关键字,不一定是一个变量本身。