【问题标题】:Get attribute of object with the string name获取具有字符串名称的对象的属性
【发布时间】:2019-12-07 00:03:54
【问题描述】:

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

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

不必这样做:

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

【问题讨论】:

  • cmd_i 对你来说是什么?使用 cmd_i.q0/1 获得的值是什么?我们需要更精确的答案才能为您提供答案!

标签: python string function


【解决方案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

【讨论】:

    【解决方案2】:

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

    a = 7
    eval('a')
    

    【讨论】:

      猜你喜欢
      • 2011-04-12
      • 2012-11-16
      • 2021-09-12
      • 1970-01-01
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      • 2012-12-27
      • 1970-01-01
      相关资源
      最近更新 更多