dynamically adding functions to a Python module
我们的框架需要用一些难看的样板代码包装某些函数:
1 2 3 4 5 | def prefix_myname_suffix(obj): def actual(): print 'hello world' obj.register(actual) return obj |
我想这可以用一个装饰器来简化:
1 2 3 | @register def myname(): print 'hello world' |
然而,这是相当棘手的,主要是因为框架在模块级别上寻找函数名的某种模式。
我在装修工身上试过以下方法,但没有用:
1 2 3 4 5 6 7 | current_module = __import__(__name__) new_name = prefix + func.__name__ + suffix # method A current_module[new_name] = func # method B func.__name__ = new_name current_module += func |
任何帮助都将不胜感激!
要么使用
1 | current_module.new_name = func |
或
1 | setattr(current_module, new_name, func) |
看来解决你的问题的办法是让装饰的功能充当原来的功能。
尝试使用twisted中的函数
它使您的修饰函数充当原始函数,希望使框架能够接受它。