如何解决重写python脚本,在每个脚本类中插入一个方法
|| 假设我有一个python模块foo.py,其中包含:class Foo(object):
def __init__(self):
pass
接下来,我想解析此脚本,并在其每个类中注入一个方法,然后将其重写为如下所示:
class Foo(object):
def __init__(self):
pass
def my_method(self):
pass # do some stuff here
我已经注意到python 2.6有一个ast
模块可以用于此目的,但是不幸的是我需要在python 2.5中做到这一点。任何建议都欢迎。
解决方法
我了解您正在尝试做的事情,但是如果您的源代码相当简单,也许您可以跳过整个解析和回写过程,而只运行正则表达式?
就像是:
re.sub(\'^class\\s+(\\w+):\\s*\\n\',\'class \\\\1:\\n%s\' % method_source,file_source,flags=re.M)
只要正确地缩进即可。
,你已经有脚本了吗?您应该可以立即对其进行修补。为了满足您当前的要求,可以使用以下方法:
class Foo(object):
def my_method(self):
pass
另外,您可以定义my method
并将其作为属性添加到Foo
类中:
def my_method(self):
pass
Foo.my_method = my_method
#or
Foo.__dict__.my_method = my_method
,一个解决方案是:
class Foo(object):
def __init__(self):
pass
import new
def some_func(self):
print \"foobar\"
Foo.my_method = new.instancemethod(some_func,None,Foo)
问题是,我不喜欢在文件末尾附加新的方法定义。我希望生成的脚本中的类如下所示:
class Foo(object):
def __init__(self):
pass
def my_method(self):
print \"foobar\"
但是如果不构建,修改然后写回sintax树就无法找到解决方案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。