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