Python 字符串中的 getattr

Python getattr in string

我有一个字符串 x = 'hello world',我正在尝试将其大写为 getattr()

我理解为getattr(x, 'upper')returnsx.upper,与x.upper()不同,然后returns<built-in method upper of str object at 0x7fd26eb0e2b0>

我也明白,使用getattr(str, 'upper)(x),我可以得到想要的结果,'HELLO WORLD'

但是为什么以及如何获得大写 x 调用 getattr(x, 'upper'),传递 x 而不是 str class 作为参数?可能吗?为什么?

直接调用返回函数:

x = 'hello world'
getattr(x, 'upper')()  # note the extra "()"
# 'HELLO WORLD'

根据给定的信息,您根本不需要 getattr,只需使用 x.upper()。由于您可能处于动态上下文中,您可能必须在多个字符串上调用多个方法,因此您可能对 operator.methodcalleroperator.attrgetter 感兴趣,这可能会使您的某些代码更可重用:

from operator import attrgetter, methodcaller

up = methodcaller("upper")
up(x)
'HELLO WORLD'
up("foo")
'FOO'

up2 = attrgetter("upper")
up2(x)()
'HELLO WORLD'