python - 如何创建局部动态变量

标签 python dynamic python-3.x eval

这是我的代码,我想使用eval()来获取规则状态,但是eval()需要局部变量,有很多继承基类的类类,所以我需要在每个类中重写 get_stat()

我想避免这种情况,一个想法是在 get_stat() 中创建动态变量,例如。类 b 在 func get_stat()

中动态创建变量 a 和 b

我应该如何在函数中创建动态变量?或任何其他方法来避免这种愚蠢的想法。我使用 python 3.2.3,locals() 不起作用

class base(object):
    def check(self):
        stat = get_stat()
    def get_stat(self):
        pass

class b(base):
    rule = 'a > 5 and b < 3'
    a = 0
    b = 0

    def update_data(self, a, b):
        self.a = a
        self.b = b

    def get_stat(self):
        a = self.a
        b = self.b
        return eval(rule)

class b(base):
    rule = 'd > 5 and e < 3'
    d = 0
    e = 0

    def update_data(self, d, e):
        self.d = d
        self.e = e

    def get_stat(self):
        d = self.d
        e = self.e
        return eval(rule)

最佳答案

您可以将字典传递给 eval() 函数,其中包含用于评估表达式的变量:

>>> eval("a + b", {"a": 2, "b": 3})
5

传递 self.__dict__ 来访问对象的属性:

>>> class MyClass(object):
...     def __init__(self):
...             self.a = 2
...             self.b = 3
... 
>>> obj = MyClass()
>>> obj.__dict__
{'a': 2, 'b': 3}
>>> eval("a + b", obj.__dict__)
5

链接:

关于python - 如何创建局部动态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13471724/

相关文章:

python - matplotlib - 如何绘制不均匀间隔为 2^n 的图形?

python - 如何绘制一定粗细的抗锯齿圆形线?如何设置 pygame.gfx.aacircle() 的宽度?

使用动态代理的 Java 继承 hack

c - C 中包含动态结构数组的结构的 Realloc

python - 从 Django 2.0 中的 LiveServerTestCase 获取正确的端口号

python - 使用 python 的 eval() 与 ast.literal_eval()

dynamic - 数据库驱动网站上的 SEO

Python TensorFlow

python - 大多数 pythonic 可能会将嵌套列表传递给格式化

python - 为什么当我运行调用 B.exe 的 A.exe 时失败,因为 B.exe 尝试在 A.exe(调用者)文件夹而不是 B.exe 文件夹(调用者)中查找其模块?