Python初学者。我正在尝试编写一个便捷函数来从对象列表中访问类变量。
目前,我正在为每个变量编写一个函数。例如,我有一个包含'动物'的类'群'。每只动物都有许多变量来存储时间序列,例如位置,航向等。(下面的例子中只给出了几个。)
我正在寻找一种方便的方法来从Swarm类中访问所有动物的特定变量。我想获得一个有n列的矩阵,其中n是动物的数量。
import numpy as np
class Animal(object):
def __init__(self):
self.x=np.zeros(10)
self.y=np.ones(10)
class Swarm(object):
def __init__(self):
self.animals=[]
self.animals.append(Animal())
self.animals.append(Animal())
def get_all_x(self):
x1=self.animals[0].x
x2=self.animals[1].x
return np.stack([x1,x2],axis=-1)
s=Swarm()
s.get_all_x()
在伪代码中,我想在'Swarm'类中使用一个函数,该函数将变量名称作为字符串输入收集。像这样的东西:
def get_var_from_all(self,var):
return np.stack([x.var for x in self.animals],axis=-1)
显然,这种访问'var'的方法不起作用。任何提示?
答案 0 :(得分:2)
使用getattr(obj, name)
- 它是一个内置函数,如果该属性存在,它会尝试从提供的name
中检索具有给定obj
的字段或方法。
def get_var_from_all(self, var):
return np.stack([getattr(x, var) for x in self.animals],axis=-1)