Python 用_getattr__问题覆盖eval globals
我试图覆盖全局变量,以便任何属性名 不存在的返回自身(名称字符串)。 这样做的原因是在eval中使用它来对c initilizer列表进行一些快速/黑客式的解析(当然也正是因为如此)。 我的代码: 每当我尝试求值一个不存在的名称时,它都会给我一个名称错误Python 用_getattr__问题覆盖eval globals,python,metaprogramming,getattr,Python,Metaprogramming,Getattr,我试图覆盖全局变量,以便任何属性名 不存在的返回自身(名称字符串)。 这样做的原因是在eval中使用它来对c initilizer列表进行一些快速/黑客式的解析(当然也正是因为如此)。 我的代码: 每当我尝试求值一个不存在的名称时,它都会给我一个名称错误 eval("aaa",eval_globals) 如果我试着直接打电话 eval("globals().__getattr__("dir")",eval_globals) eval("globals().__getattr__("dir")"
eval("aaa",eval_globals)
如果我试着直接打电话
eval("globals().__getattr__("dir")",eval_globals)
eval("globals().__getattr__("dir")",eval_globals)
即使对于有效的属性,我也只返回attr name字符串。
我做错了什么?因为您正在对dict进行子类化,所以您需要覆盖
\uuu getitem\uuuu
(索引访问器)
印刷品
> 'aaa'
> 1337
由于您正在对dict进行子类化,因此需要覆盖
\uuu getitem\uuu
(索引访问器)
印刷品
> 'aaa'
> 1337
AKX给出的答案是正确的,但仅供参考,只有在常规属性查找失败时才会调用
\uuuu getattr\uuuu
,因此如果/其他,则不需要——只要返回名称
即可(如果它实际上是您想要修改的属性访问)。AKX给出的答案是正确的,但是仅供参考,只有在常规属性查找失败时才会调用\uuuu getattr\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。
> 'aaa'
> 1337