使用 Python eval 评估类

Nar*_*zew 1 python oop eval kivy

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

evalstr = str("class MyScreen(Screen):\n\tpass\n")
eval(evalstr)
Run Code Online (Sandbox Code Playgroud)

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

che*_*ner 5

改用该type函数:

MyScreen = type("MyScreen", (Screen,), {})
Run Code Online (Sandbox Code Playgroud)

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

您也可以简单地以“正常”方式定义类;没有什么说class语句必须在模块的全局级别:

class Something(object):

    # Define a new class here...
    class MyScreen(Screen):
        pass

    def __init__(self):
        """Initialize a Something object"""
        # ... or here
        class MyScreen(Screen):
            pass
Run Code Online (Sandbox Code Playgroud)