存在しない属性名がそれ自体(名前文字列)を返すように、グローバルをオーバーライドしようとしています。この理由は、evalでそれを使用して、acイニシライザーリストのいくつかの迅速でハッキーな解析を行うためです(そしてもちろん)。私のコード:
class EvalGlobalsDict(dict):
def __getattr__(self, name):
if hasattr(self, name):
return super(EvalGlobalsDict, self).__getattr__(name)
else:
return name
eval_globals = EvalGlobalsDict(globals())
存在しない名前を評価しようとすると、NameErrorが発生します
eval("aaa",eval_globals)
そして、私が直接電話しようとすると
eval("globals().__getattr__("dir")",eval_globals)
eval("globals().__getattr__("dir")",eval_globals)
有効な属性であっても、属性名の文字列のみが返されます。私は何が間違っているのですか?