从该类的实例生成类的Python代码
在我的代码中,我在运行时生成新的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()
希望这能帮到你一点。
谢谢
3 个回答
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
3
从类对象本身生成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标准库有时也会用它来处理动态类,有时候。)