猿问

如何从格式字符串中调用对象的方法?(Python)

我想从模板字符串中调用字符串的 lower 方法。理想情况下,这看起来像


string = "Lowercase: {value.lower()}"


string.format(value=...)

但是,这给了我一个错误提示AttributeError: 'str' object has no attribute 'lower()'(我理解为什么会出现此错误)。


我想知道是否有办法实现这一目标。我已经研究过使用转换(比如'{value!r}调用repr),但这并没有解决我的问题。我可以创建自定义转换说明符吗?


(为了记录,string.format(value=value.lower())在我的情况下不一定有效。)


凤凰求蛊
浏览 126回答 1
1回答

www说

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 AttributeErrorx = 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!
随时随地看视频慕课网APP

相关分类

Python
我要回答