这是我的代码,我想使用eval()
来获取规则状态,但是eval()
需要局部变量,有很多继承基类的类类,所以我需要在每个类中重写 get_stat()
。
我想避免这种情况,一个想法是在 get_stat()
中创建动态变量,例如。类 b 在 func get_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)
最佳答案
您可以将字典传递给 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/