gpt4 book ai didi

code-generation - Python生成Python

转载 作者:太空狗 更新时间:2023-10-29 17:00:26 24 4
gpt4 key购买 nike

我有一组对象,我正在为其创建一个类,我想将每个对象存储为它自己的文本文件。我真的很想将它存储为一个 Python 类定义,它是我正在创建的主类的子类。因此,我四处寻找并在 effbot.org 上找到了一个 Python 代码生成器。我用它做了一些试验,这是我想出的:

#
# a Python code generator backend
#
# fredrik lundh, march 1998
#
# fredrik@pythonware.com
# http://www.pythonware.com
#
# Code taken from http://effbot.org/zone/python-code-generator.htm

import sys, string

class CodeGeneratorBackend:

def begin(self, tab="\t"):
self.code = []
self.tab = tab
self.level = 0

def end(self):
return string.join(self.code, "")

def write(self, string):
self.code.append(self.tab * self.level + string)

def indent(self):
self.level = self.level + 1

def dedent(self):
if self.level == 0:
raise SyntaxError, "internal error in code generator"
self.level = self.level - 1

class Point():
"""Defines a Point. Has x and y."""
def __init__(self, x, y):
self.x = x
self.y = y

def dump_self(self, filename):
self.c = CodeGeneratorBackend()
self.c.begin(tab=" ")
self.c.write("class {0}{1}Point()\n".format(self.x,self.y))
self.c.indent()
self.c.write('"""Defines a Point. Has x and y"""\n')
self.c.write('def __init__(self, x={0}, y={1}):\n'.format(self.x, self.y))
self.c.indent()
self.c.write('self.x = {0}\n'.format(self.x))
self.c.write('self.y = {0}\n'.format(self.y))
self.c.dedent()
self.c.dedent()
f = open(filename,'w')
f.write(self.c.end())
f.close()

if __name__ == "__main__":
p = Point(3,4)
p.dump_self('demo.py')

感觉真的很难看,有没有更干净/更好/更 pythonic 的方法来做到这一点?请注意,这不是我真正打算用的类(class),这是一个小类(class),我可以用不多的代码轻松模拟。此外,子类不需要在其中包含生成函数,如果我再次需要它,我可以从父类(super class)中调用代码生成器。

最佳答案

我们使用 Jinja2 来填充一个模板。这要简单得多。

模板看起来很像 Python 代码,其中有一些 {{something}} 替换。

关于code-generation - Python生成Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1364640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com