Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.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 dict的对象中处理名称冲突?_Python - Fatal编程技术网

如何在类似python dict的对象中处理名称冲突?

如何在类似python dict的对象中处理名称冲突?,python,Python,我有一个用例,我正在读取一个pickle文件,并将文件内容放入定制DictLikeObject中 但是,其中一个文件列是“copy”,DictLikeObject具有copy方法,因此我无法获得该列的正确值 考虑以下代码: 类DictLikeObject(dict): def_u_ugetattr_u_u(self,key): 尝试: 返回自[键] 除属性错误外: 提升值错误(“未找到”) def副本(自我): 通过 行=DictLikeObject() 行['copy']=1; 行['stat

我有一个用例,我正在读取一个pickle文件,并将文件内容放入定制DictLikeObject中

但是,其中一个文件列是“copy”,DictLikeObject具有copy方法,因此我无法获得该列的正确值

考虑以下代码:

类DictLikeObject(dict):
def_u_ugetattr_u_u(self,key):
尝试:
返回自[键]
除属性错误外:
提升值错误(“未找到”)
def副本(自我):
通过
行=DictLikeObject()
行['copy']=1;
行['state']='completed'
打印(getattr(行“状态”))
完整的
打印(getattr(行,“复制”))

有什么方法可以确保
getattr
返回'copy'属性的值,而不是方法?

为什么不使用
dict.get
来获取属性,这将确保搜索键,而不是类的属性。它还避免了定义自定义
\uuuu getattr\uuuu
dunder方法的需要

print(row.get('copy'))
print(row.get('state'))
输出将是

1
completed
completed
1
虽然如果要使用
getattr
,您可以替代

输出将是

1
completed
completed
1

为此,您应该使用
dict.copy
,否则getattr将返回您看到的copy的classmethod

print(row.get('state'))    
print(row.get('copy'))

为什么不把你的属性命名为别的呢?它应该是
copy(self)
某个项目,在该项目中,我需要确保向后兼容性,并且不能使用“copy”列更改已经写入的文件,您可以使用
dict.get
获取
copy
completed
检查我的答案below@DeepanshuArora请不要要求投票,因为这可能会被视为是错误的。