Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何调用对象';是否从格式字符串中删除方法?(Python)_Python_String - Fatal编程技术网

如何调用对象';是否从格式字符串中删除方法?(Python)

如何调用对象';是否从格式字符串中删除方法?(Python),python,string,Python,String,我想从模板字符串中调用字符串的lower方法。理想情况下,这看起来像 string=“小写:{value.lower()}” 格式(值=…) 但是,这给了我一个错误,说AttributeError:'str'对象没有属性'lower()'(我理解为什么会出现此错误) 我想知道是否有办法做到这一点。我曾经研究过使用转换(比如调用repr)来调用{value!r}),但这并没有解决我的问题。我可以创建自定义转换说明符吗 (对于记录,string.format(value=value.lower()

我想从模板字符串中调用字符串的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(…)
中的关键字,不一定是一个变量本身。