Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用_getattr__问题覆盖eval globals_Python_Metaprogramming_Getattr - Fatal编程技术网

Python 用_getattr__问题覆盖eval globals

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中使用它来对c initilizer列表进行一些快速/黑客式的解析(当然也正是因为如此)。 我的代码:

每当我尝试求值一个不存在的名称时,它都会给我一个名称错误

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