用'变量'名称设置属性

问题描述:

试图弄清楚我可以如何执行以下操作。假设我有一些具有我想要设置的属性的函数。一般我们称之为:func.attrib = ['list']。挑战是'func'可能会根据某些查找的结果(例如,基于字典中的密钥)而有所不同。用'变量'名称设置属性

所以,我可能想说:

func.attrib = ['list'] 
OR 
func1.attrib = ['list'] 
OR 
func2.attrib = ['list'] 

其中funcfunc1func2是一个查找词典的结果。

处理func作为string和追加".attrib"将无法​​正常工作,所以我猜一个更具体的格式化方法是必需的。

任何帮助赞赏!

+0

你怎么知道你是否应该使用func1,func2,func3等? –

+0

,它基于字典中的查找,基于密钥。我并不打算将它包含在原始问题 – laszlopanaflex

+0

我的意思是,查找结果存储在哪里?结果是函数吗?或者它是一个指示函数的字符串? –

您是否考虑过使用if语句? 因为如果查找是“Big Melons”,并且您必须使用func1.attrib,那么您可以使用if或elif语句。

if look_up = "Big Melons": 
    func1.attrib = ["Lists"] 
elif look_up = "Small Melons": 
    func2.attrib = ["list"] 
+0

这是次优的,因为可能有很多功能,这种类型的变量用法在一些方面需要。真正的问题是有没有一种方法可以将字符串追加到属性调用中。 – laszlopanaflex

+0

http://*.com/q/3253966/5504999 试试看。我希望它能帮助你。 –

如果你想设置存储为dict值的函数的属性,只是做了查找和设置属性,例如

mydict = {'foo': func, 'bar': func1, 'baz': func2} 

key = ... get a key that is either 'foo', 'bar' or 'baz' ... 

mydict[key].attrib = ['list'] 

如果没有这样的dict存在,但你有问题的所有功能模块的全局命名空间中定义,并且要根据函数名本身('func''func1'等属性来分配),那么你可以使用globals来获取当前模块的全局dict

# key is 'func', 'func1', or 'func2' 
globals()[key].attrib = ['list'] 

如果函数在其他模块,你会使用getattr

# All the modules are in module spam 
import spam 

getattr(spam, key).attrib = ['list']