在我的代码中,我在运行时生成新的 Python 类。对于其中一些,我想生成 python 代码,就像我在 .py 文件中编写这些类一样。
假设我动态创建了一个类 A: type('A', (), {'bar':True} 相当于代码:
class A(object):
bar=True
我想要的是从我的动态类中生成这个等效代码。 我正在尝试实现一个函数“generate_A_code”
kls_A = type('A', (), {'bar':True}
kls_A.generate_A_code()
希望对您有所帮助。
谢谢
请您参考如下方法:
从类对象本身生成 Python 代码几乎是不可能的。您需要以其他方式保存生成类的指令。
最好的方法可能是拥有一个创建类的函数,然后在生成的代码中导入和调用它。所以生成的代码看起来像这样:
kwargs = {answer=42, name='foo'}
import class_maker
SomeClass1 = class_maker.make_class(**kwargs)
另一种选择是直接生成你想要的Python代码,exec生成类,然后和类一起保存。
code = '''class MyClass:
pass
'''
the_locals = {}
exec(code, globals(), the_locals)
MyClass = the_locals['MyClass']
MyClass._code = code
与 exec 一样,请务必小心使用。它可以运行任何 Python 代码。认真思考是否有任何方法可以以不同的方式做您需要做的事情。人们会因为你使用 exec 而对你大喊大叫。 (但即使是 Python 标准库也将它用于动态类 sometimes。)
