如何在下面的代码中从字典中调用get_productname函数?
test = {
'get_productname' : {
'id' : 1,
'active' : 1,
}
}
class search(object):
def __init__(self):
for key, value in test.items():
if test[key]['active']:
... here i want to call the "get_productname" function from the dict key name
self.key()
... HOW CAN I DO THIS?
def get_productname(self, id):
...
return productname
答案 0 :(得分:7)
您需要getattr
功能。
class search(object):
def __init__(self):
for key, value in test.items():
if test[key]['active']:
getattr(self, key)(test['key']['id'])
根据评论,如果您不是100%肯定该方法将存在,您可以提前执行hasattr(self, name)
检查,但它等同于:
try:
getattr(self, key)
except AttributeError, e:
# code here that would handle a missing method.
答案 1 :(得分:3)
如果您事先知道要调用的方法属于哪个类,则可以使用方法本身而不是其名称作为字典键。然后你可以简单地打电话给他们:
class search(object):
def __init__(self, test):
for func, value in test.iteritems():
if value['active']:
func(self, value['id'])
def get_productname(self, id):
pass
test = {search.get_productname: {'id' : 1, 'active' : 1}}
答案 2 :(得分:0)
假设您在某处定义了get_productname()
函数,我只需将其添加到字典中,如下所示:
test = {
'get_productname' : {
'id' : 1,
'active' : 1,
'func' : get_productname
}
}
然后你可以这样称呼它:
class search(object):
def __init__(self):
for key, value in test.items():
if test[key]['active']:
# then call the associated function like this
test[key]['func']()
...
希望有所帮助。
答案 3 :(得分:0)
即使人们可能会因为暗示这一点而激怒我:
http://docs.python.org/library/functions.html#eval
试试这个:
test = {
'get_productname' : {
'id' : 1,
'active' : 1,
}
}
class search(object):
def __init__(self):
for key, value in test.items():
if test[key]['active']:
eval("self.%s()" % key)
# or, if you want to pass ID as an arg:
eval("self.%(method_name)s(id=%(id)s)" % \
dict(method_name=key, id=value["id"])
def get_productname(self, id):
...
return productname
没有运行它,但这应该有用。