重写一个python脚本,在每个脚本的类中注入一个方法

时间:2011-05-23 06:25:52

标签: python code-generation

假设我有一个包含以下内容的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中执行此操作。欢迎任何建议。

3 个答案:

答案 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树,就无法找到解决方案。