使用Python eval计算类

2024-09-24 22:17:52 发布

您现在位置:Python中文网/ 问答频道 /正文

如何使用eval在其他类中定义类?在

evalstr = str("class MyScreen(Screen):\n\tpass\n")
eval(evalstr)

我想在其他类方法中执行这段代码。但它返回一个错误。在


Tags: 方法代码定义错误evalscreenclassstr
3条回答

您不能使用eval来实现这一点,因为class是一个语句,eval只计算表达式,而不是语句。您可以使用exec。在

您想要exec而不是eval这里(安全问题放在一边)

evalstr = str("class MyScreen(Screen):\n\tpass\n")
exec(evalstr)

eval将只计算表达式并返回其值。exec用于将任意代码字符串作为语句执行,这正是您在这里需要的。在

但是说真的,在大多数情况下,这是一个等待发生的安全灾难,请考虑其他方法(比如不将代码作为字符串编写)。在

编辑: 切普纳的答案可能是正确的。在

请改用type函数:

MyScreen = type("MyScreen", (Screen,), {})

这是在运行时创建类的正确方法(实际上,执行class语句所做的基本操作,因为type也是Python中的默认元类)。在

您也可以简单地以“普通”的方式定义类;没有任何内容表明class语句必须位于模块的全局级别:

^{pr2}$

相关问题 更多 >