我正在尝试覆盖全局变量,以便任何不存在的属性名称都返回自身(名称字符串)。这样做的原因是在 eval 中使用它来对 ac initilizer 列表进行一些快速/hacky解析(当然只是因为)。我的代码:
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)
即使对于有效的属性,我也只能取回 attr 名称字符串。我究竟做错了什么?