python - 在 python 中使用 eval 动态创建类

标签 python oop metaprogramming

我想接受一个参数并创建一个名称为参数本身的类。 例如,我将“Int”作为参数并创建一个名为“Int”的类, 那是我的课会是这样的。

class Int :
    def __init__(self,param) :
        self.value = 3

我正在这样做。

def makeClass( x ) :

    return eval( 'class %s :\n    def __init__(self,param) :\n        self.type = 3'%(x,))

然后调用

myClass = makeClass('Int')
myInt = myClass(3)

我收到一个语法错误。请帮忙。

最佳答案

eval 用于计算表达式,class 不是表达式,它是一个语句。也许您想要类似 exec 的东西?

作为旁注,您在这里所做的可能很容易用 type 完成,然后您回避了使用 eval/exec 的所有性能和安全隐患。

def cls_init(self,param):
    self.type = 3

Int = type("Int",(object,),{'__init__':cls_init})
#           ^class name
#                ^class bases -- inherit from object.  It's a good idea :-)
#                           ^class dictionary.  This is where you add methods or class attributes.

关于python - 在 python 中使用 eval 动态创建类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14243956/

相关文章:

python - 遍历具有不同长度字符串的列表

python - Python 3 中解析 XML 模式的 LXML 问题

python - 为什么 platform.release() 在 Windows 10 中返回 "8"?

java - 在另一个类中使用其他类方法和字段

c++ - 对于 GCC 的 "sorry, unimplemented: cannot expand ‘NEXT ...’ 到固定长度参数列表“错误”,是否有一个很好的解决方法?

python - 将字符串中的十六进制字符附加到字符串

iOS:使用 Swift 创建对象类

php - 类型提示和默认参数值也是方法签名吗?

c++ - 元程序c++代码

ruby - 在 Ruby 中定义新的逻辑运算符