1

これは私のコードですeval()。ルールのステータスを取得するために使用したいのですがeval()、ローカル変数が必要です。基本クラスを継承するクラスが多数あるためget_stat()、すべてのクラスで書き直す必要があります。

これを避けたいのですが、アイデアは、動的変数を作成することですget_stat()。クラス b は fun で変数 a と b を動的に作成します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)
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 に答える