1

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

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

我应该如何在函数中创建动态变量?或任何其他方式来避免这个愚蠢的想法。我使用 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)
4

1 回答 1

2

您可以将字典传递给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

链接:

于 2012-11-20T11:14:19.210 回答