我有一些数据存储在对象Foo()
中。
Foo.data
是n x m np.array的列表,其中每个数组代表特定时间的一些实验数据。该数组由m个变量组成,n对应于已经进行测量的不同点的数量。
我们可以考虑使用变量名称列表,例如:
var_names=['x','volume','u','L_bar','rho','P',.....]
我想让数据更易于访问,定义如下内容:
def Foo.P(self,x,time)
index_t=time_list.index(time)
index_x=var_names.index(x)
index_P=var_names.index(P)
return Foo.data[index_t][index_x,index_P]
问题是:考虑到变量列表不是固定的,但它可以变化,我是否可以自动定义一些我之前显示的函数而不为每个变量明确定义一个?
我的意思是,我希望有一堆函数,如Foo.P,Foo.volume,Foo.u,Foo.rho,它们提取函数名称给出的变量的值,用于(x ,时间)位置,没有逐一定义所有这些。
答案 0 :(得分:2)
您可以通过在Foo
上定义特殊__getattr__
方法来实现,如下所示:
def __getattr__(self, name):
"""If name is known, return a function to get that data for given (x, time)."""
if name not in var_names: # name not known
raise AttributeError
return lambda x, time: self.data[time_list.index(time)][var_names.index(x), var_names.index(name)]
答案 1 :(得分:1)
为什么不通过这个名字?像这样:
#!/usr/bin/python
# -*- coding: utf-8 -*-
var_names=['x','volume','u','L_bar','rho','P']
def general_foo(self, name, x, time)
index_t=time_list.index(time)
index_x=var_names.index(x)
index_P=var_names.index(name)
return Foo.data[index_t][index_x,index_P]
for var in var_names:
general_foo(var, x, time)