使用\u getattr\u问题覆盖eval globals

2024-05-20 18:43:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图覆盖全局变量,以便任何属性名 它不存在返回自身(名称字符串)。 这样做的原因是在eval中使用它来对c initilizer列表进行一些快速/快速的解析(当然是因为这样)。 我的代码:

class EvalGlobalsDict(dict):
    def __getattr__(self, name):
        if hasattr(self, name):
            return super(EvalGlobalsDict, self).__getattr__(name) 
        else:
            return name


eval_globals = EvalGlobalsDict(globals())

每当我试图评估一个不存在的名字,它会给我一个名字错误

^{pr2}$

如果我直接打电话

eval("globals().__getattr__("dir")",eval_globals)
eval("globals().__getattr__("dir")",eval_globals)

即使是有效的属性,我也只获取attr name字符串。 我做错什么了?在


Tags: 字符串nameself名称return属性direval
1条回答
网友
1楼 · 发布于 2024-05-20 18:43:20

因为您是dict的子类化,所以需要重写__getitem__(索引访问器)。在

class EvalGlobalsDict(dict):
    def __getitem__(self, name):
        return self.get(name, name)

foo = 1337
eval_globals = EvalGlobalsDict(globals())
print repr(eval("aaa", eval_globals))
print repr(eval("foo", eval_globals))

印刷品

^{pr2}$

相关问题 更多 >