获取具有字符串名称的对象的属性

时间:2019-12-06 15:19:49

标签: python string function

当我具有所需属性名称的字符串时,如何获取对象的属性值?例如,假设cmd_i具有属性q0q1。我希望能够做到这一点:

for x in range(2):                 
    print('cmd_i.q{}'.format(x))

不必这样做:

print(cmd_i.q0)
print(cmd_i.q1)

2 个答案:

答案 0 :(得分:1)

您可以使用getattr通过字符串获取对象的属性值:

class Test:
    q1 = 2
    q2 = 3
    q3 = 'a'

>>> x = Test()
>>> x.q1
2
>>> getattr(x, 'q2')
3

并带有f字符串:

>>> for i in range(1, 4):
...     print(f'q{i}', getattr(x, f'q{i}'))
...
q1 2
q2 3
q3 a

如果属性不存在,您还可以传递默认值以返回(而不是引发AttributeError):

>>> getattr(x, 'q0')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Test' object has no attribute 'q0'
# vs
>>> for i in range(1, 4):
...     print(f'q{i}', getattr(x, f'q{i}', None))
...
q0 None
q1 2
q2 3
q3 a

答案 1 :(得分:0)

也可以使用eval函数,但似乎不被认为是一种好的做法:https://stackoverflow.com/a/2909510/

a = 7
eval('a')