方便的类变量集合

时间:2016-06-29 08:21:25

标签: python

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'的方法不起作用。任何提示?

1 个答案:

答案 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)

(如果您计划进行更多元编程,您可能也会对hasattrsetattr感兴趣。)