【问题标题】:calling attribute of object through an array (python)通过数组调用对象的属性(python)
【发布时间】:2021-12-08 16:43:00
【问题描述】:

我已经定义了一个对象,我希望能够在循环中调用该对象的属性,但我不确定如何执行此操作。这是我写的(错误的)示例代码,试图表明我想做什么:

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']

#what I want: 
my_var = test.index[2]
#where index[2] is equivalent to c and thus my_var is 'g'

我得到的错误是:

AttributeError: 'my_data' object has no attribute 'index'

我明白,因为它正在寻找特定的属性索引而不是数组索引[2] 的值,但我不知道如何解决这个问题。我需要它,因为我想循环使用它。

谢谢!

【问题讨论】:

  • my_data 是一个类,类不是一个列表。即使它是一个列表,它也不起作用,因为您使用方括号 [] 而不是括号 () 用于 index 函数
  • 您根本没有存储数组,因此类似索引的访问将不起作用。 my_data 实例中的唯一项目是 abcd。您可以通过test.atest.b、...访问它们
  • 另外,请参阅this 进行迭代。

标签: python class object attributes


【解决方案1】:

你可以这样得到:

my_var = getattr(test, index[2])
# my_var = 'g'

python 中的每个类还具有默认(但隐藏)__getattribute____getattr__ 方法,用于处理获取类的属性。如果需要,您可以覆盖它们以定义一些自定义行为,但在这种情况下您不需要。

【讨论】:

  • 谢谢,这非常接近,但是如果我的对象“扫描”不是一个数组,而是一个特殊类项目的列表(我制作了一个虚拟版本,因为整个事情有点一团糟)。所以当我用测试版尝试这个时,它仍然说没有属性(这是代码,我知道这有点奇怪,因为列出整个返回代码会很多):
  • scans[1].data_to_plot=getattr(scans[1].get_channel(),'高度传感器')
  • 如果这没有意义,我完全明白。我有一个草率的工作,我只是在寻找更优雅的东西。
  • 您的代码 sn-p 正在寻找一个名为 Height Sensor 的属性,python 无法找到该属性,因为其中使用空格定义的属性在 python 中无效。您可能打算输入Height_Sensor。如果仍然不起作用,请检查 scans[1].get_channel() 是否确实返回了一个对象,该对象具有可访问的变量或方法 Height_Sensor
猜你喜欢
  • 2019-05-29
  • 1970-01-01
  • 2013-06-06
  • 1970-01-01
  • 2019-08-22
  • 1970-01-01
  • 2013-05-05
  • 2010-11-13
  • 2018-01-16
相关资源
最近更新 更多