テキストで表現された任意の(データで定義された)ルールのセットをチェックしたいのですが、eval()はうまく機能します。
たとえば、AとBの両方が有効であることを確認するルールを定義します。
Rule = "A and B"
print eval(Rule)
では、どのようにして任意のアイテムのセットに動的に値を割り当てるのですか?
名前付きオプションのリストと選択のリストがあります。選択範囲内のすべてが有効(True)と見なされ、オプション内のすべてが無効(False)と見なされます。
したがって、このコードは機能しますが、ローカル名前空間内で値を設定していて、オプション名がローカル変数と衝突するのを防ぐことができないため、私はそれが好きではありません。
def CheckConstraints(self, Selections):
'Validate the stored constraints'
Good = True
## Undefined options default to False
for i in self.Options:
exec(i+" = False") ## Bad - can I use setattr?
## Set defined Options to True
for i in Selections:
exec(i+" = True") ## Bad - can I use setattr?
for i in self.Constraints:
if not eval( i ):
Good = False
print "Constraint Check Failure:", i, Selections
else:
print "Constraint Check OK:", i, Selections
return Good
setattrを使用しようとしましたが、setattrが何を設定しているかが明確ではなく、evalは設定された値を使用できないようです。
私はPython2.7xを使用しています
何か提案を歓迎しますか?