假设我有一个包含以下内容的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中执行此操作。欢迎任何建议。
答案 0 :(得分:2)
我理解你要做的是什么,但如果你的源代码相当简单,也许你可以跳过整个解析并完全回写并运行regexp?
类似的东西:
re.sub('^class\s+(\w+):\s*\n', 'class \\1:\n%s' % method_source, file_source, flags=re.M)
让缩进正确..
答案 1 :(得分:1)
你有脚本吗?你应该能够现在修补它。为了满足您当前的要求,这样的事情就可以了:
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
答案 2 :(得分:0)
解决方案是:
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树,就无法找到解决方案。