通过数组调用对象的属性(python)
通过数组调用对象的属性(python)
我已经定义了一个对象,我希望能够在循环中调用该对象的属性,但我不确定如何做到这一点。以下是我编写的错误示例代码,以尝试说明我想要做的事情:\n
class my_data: def __init__(self,a,b,c,d): self.a = 'e' self.b = 'f' self.c = 'g' self.d = 'h' test=my_data('a','b','c','d') #print(test.a) #e index=['a','b','c','d'] #我想要的是: my_var = test.index[2] #其中index[2]等同于c,因此my_var为'g'
\n我得到的错误是:\n
AttributeError: 'my_data' object has no attribute 'index'
\n我理解这个错误,因为它正在寻找特定的属性index,而不是数组index[2]的值,但是我无法解决这个问题。我需要解决这个问题,因为我想在循环中使用它。\n谢谢!
在Python中,可以通过以下方式获取对象的属性:
my_var = getattr(test, index[2]) # my_var = 'g'
Python中的每个类也都有默认的(但是隐藏的)`__getattribute__`和`__getattr__`方法,用于处理类的属性获取。如果需要,可以重写这些方法来定义自定义的行为,但在这种情况下,不需要进行重写。
感谢您的解答,但是如果对象"scans"不是一个数组,而是一个特殊类项的列表(我创建了一个虚拟版本,因为整个代码有点混乱),该如何处理呢?当我尝试对测试版本进行操作时,仍然显示没有属性(这是代码,虽然有点奇怪,因为列出整个后端代码将会很长):
scans[1].data_to_plot = getattr(scans[1].get_channel(), 'Height Sensor')
如果这没有任何意义,我完全理解。我有一个不太优雅的解决方法,我只是在寻找更优雅的解决方案。
你的代码片段正在寻找一个名为`Height Sensor`的属性,但是Python无法找到这样的属性,因为属性名称中的空格在Python中是无效的。你可能是想输入`Height_Sensor`。如果仍然不起作用,请检查`scans[1].get_channel()`是否确实返回一个对象,该对象可以访问到一个名为`Height_Sensor`的变量或方法。