2024-09-24 22:17:52 发布
网友
如何使用eval在其他类中定义类?在
evalstr = str("class MyScreen(Screen):\n\tpass\n") eval(evalstr)
我想在其他类方法中执行这段代码。但它返回一个错误。在
您不能使用eval来实现这一点,因为class是一个语句,eval只计算表达式,而不是语句。您可以使用exec。在
eval
class
exec
您想要exec而不是eval这里(安全问题放在一边)
evalstr = str("class MyScreen(Screen):\n\tpass\n") exec(evalstr)
eval将只计算表达式并返回其值。exec用于将任意代码字符串作为语句执行,这正是您在这里需要的。在
但是说真的,在大多数情况下,这是一个等待发生的安全灾难,请考虑其他方法(比如不将代码作为字符串编写)。在
编辑: 切普纳的答案可能是正确的。在
请改用type函数:
type
MyScreen = type("MyScreen", (Screen,), {})
这是在运行时创建类的正确方法(实际上,执行class语句所做的基本操作,因为type也是Python中的默认元类)。在
您也可以简单地以“普通”的方式定义类;没有任何内容表明class语句必须位于模块的全局级别:
您不能使用
eval
来实现这一点,因为class
是一个语句,eval
只计算表达式,而不是语句。您可以使用exec
。在您想要
exec
而不是eval
这里(安全问题放在一边)eval
将只计算表达式并返回其值。exec
用于将任意代码字符串作为语句执行,这正是您在这里需要的。在但是说真的,在大多数情况下,这是一个等待发生的安全灾难,请考虑其他方法(比如不将代码作为字符串编写)。在
编辑: 切普纳的答案可能是正确的。在
请改用
type
函数:这是在运行时创建类的正确方法(实际上,执行
class
语句所做的基本操作,因为type
也是Python中的默认元类)。在您也可以简单地以“普通”的方式定义类;没有任何内容表明
^{pr2}$class
语句必须位于模块的全局级别:相关问题 更多 >
编程相关推荐