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.methodcaller
和 operator.attrgetter
感兴趣,这可能会使您的某些代码更可重用:
from operator import attrgetter, methodcaller
up = methodcaller("upper")
up(x)
'HELLO WORLD'
up("foo")
'FOO'
up2 = attrgetter("upper")
up2(x)()
'HELLO WORLD'
我有一个字符串 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.methodcaller
和 operator.attrgetter
感兴趣,这可能会使您的某些代码更可重用:
from operator import attrgetter, methodcaller
up = methodcaller("upper")
up(x)
'HELLO WORLD'
up("foo")
'FOO'
up2 = attrgetter("upper")
up2(x)()
'HELLO WORLD'