Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从类的python实例生成类的python代码_Python_Code Generation_Metaprogramming - Fatal编程技术网

从类的python实例生成类的python代码

从类的python实例生成类的python代码,python,code-generation,metaprogramming,Python,Code Generation,Metaprogramming,在我的代码中,我在运行时生成新的python类。对于其中一些,我希望生成python代码,就像我在.py文件中编写这些类一样 假设我动态创建了一个类a: type('A',(),{'bar':True}相当于以下代码: class A(object): bar=True 我想要的是从我的动态类生成这个等价的代码。 我正在尝试实现一个函数“生成代码” 希望这有点帮助 谢谢,您可以使用,或者根据您的具体需要使用。从类对象本身生成Python代码实际上是不可能的。您需要以另一种方式保存生成

在我的代码中,我在运行时生成新的python类。对于其中一些,我希望生成python代码,就像我在.py文件中编写这些类一样

假设我动态创建了一个类a:
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