从类的python实例生成类的python代码
在我的代码中,我在运行时生成新的python类。对于其中一些,我希望生成python代码,就像我在.py文件中编写这些类一样 假设我动态创建了一个类a:从类的python实例生成类的python代码,python,code-generation,metaprogramming,Python,Code Generation,Metaprogramming,在我的代码中,我在运行时生成新的python类。对于其中一些,我希望生成python代码,就像我在.py文件中编写这些类一样 假设我动态创建了一个类a: type('A',(),{'bar':True}相当于以下代码: class A(object): bar=True 我想要的是从我的动态类生成这个等价的代码。 我正在尝试实现一个函数“生成代码” 希望这有点帮助 谢谢,您可以使用,或者根据您的具体需要使用。从类对象本身生成Python代码实际上是不可能的。您需要以另一种方式保存生成
type('A',(),{'bar':True}
相当于以下代码:
class A(object):
bar=True
我想要的是从我的动态类生成这个等价的代码。
我正在尝试实现一个函数“生成代码”
希望这有点帮助
谢谢,您可以使用,或者根据您的具体需要使用。从类对象本身生成Python代码实际上是不可能的。您需要以另一种方式保存生成类的说明
最好的方法可能是使用函数生成类,并在生成的代码中导入和调用它。因此生成的代码如下所示:
kwargs = {answer=42, name='foo'}
import class_maker
SomeClass1 = class_maker.make_class(**kwargs)
另一个选项是直接生成所需的Python代码,
exec
it生成类,然后将其与类一起保存
code = '''class MyClass:
pass
'''
the_locals = {}
exec(code, globals(), the_locals)
MyClass = the_locals['MyClass']
MyClass._code = code
像往常一样,使用exec
,要非常小心。它可以运行任何Python代码。如果有任何方法可以以不同的方式执行任何需要执行的操作,请仔细想想。人们会因为使用exec
(但即使是Python标准库也会将其用于动态类。)也许您可以使用:
收益率:
class A(object):
def __init__(self):
self.init = num
你能给出一个简单的例子,用一些代码和你想要实现的解释吗?谢谢你的澄清。现在,你所说的“我动态创建了一个类a”到底是什么意思?听起来好像它不是
.py
文件的一部分,也不是以字符串形式生成代码并eval
它…那么您到底要做什么呢?下面是我编写的动态创建类的示例:Foo=type('Foo',(),{'bar':True})谢谢你的回答,但我想我在我的帖子里不太清楚。谢谢,但不幸的是,如果你用类型('A',(){'bar':True})生成类,inspect.getsource不起作用。是的,看起来很难。我将尝试用另一种方式生成它。Thx。
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