通过数组调用对象的属性(python)

16 浏览
0 Comments

通过数组调用对象的属性(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谢谢!

0
0 Comments

在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`的变量或方法。

0