How to call a method whose name is stored in a variable
本问题已经有最佳答案,请猛点这里访问。
在下面的代码中,如何使unicode数据可调用。我得到的错误是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | def test(test_config): for i in test_config: print i.header //prints func1 print type(i.header) // prints unicode try: #i.header()//TypeError: 'unicode' object is not callable func = globals()[i.header] print func # found it func() except AttributeError: logging.error("Method %s not implemented"%(i.header)) def func1(): print"In func1" test(u'func1') |
使用字符串创建要调用的函数的dict:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | def test(test_config): for i in test_config: print i.header //prints func1 print type(i.header) try: methods[i.header]() except (AtributeError, TypeError): logging.error("Method %s not implemented"%(i.header)) def func1(): print"In func1" def func2(): print"In func2" methods = {u'func1':func1, u'func2':func2} #Methods that you want to call |
号
使用类:
1 2 3 4 5 6 7 8 9 10 11 | class A: def test(self, test_config): try: getattr(self, i.header)() except AtributeError: logging.error("Method %s not implemented"%(i.header)) def func1(self): print"In func1" x = A() x.test(pass_something_here) |
如果我理解,您要做的就是找到一个函数,它的名称被
这可以使用
1 2 3 | func = globals()[i.header] print func # found it func() # call it |
这是一个使用装饰的好方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | header_handlers = {} def header_handler(f): header_handlers[f.__name__] = f return f def main(): header_name ="func1" header_handlers[header_name]() @header_handler def func1(): print"func1" @header_handler def func2(): print"func2" @header_handler def func3(): print"func3" if __name__ =="__main__": main() |
。
这样,很明显函数是否是头处理程序