在我的代码中,我在运行时生成新的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()
希望这有点帮助。
由于
答案 0 :(得分:1)
答案 1 :(得分:0)
从类对象本身生成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。)
答案 2 :(得分:0)
也许您可以使用inspect.getsource:
import inspect
def generate_kls_A(num):
class A(object):
def __init__(self):
self.init = num
return A
kls_A=generate_kls_A(1)
print(inspect.getsource(kls_A))
的产率:
class A(object):
def __init__(self):
self.init = num