gpt4 book ai didi

python - 如何处理Python dict之类对象中的名称冲突?

转载 作者:行者123 更新时间:2023-12-01 07:41:43 26 4
gpt4 key购买 nike

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

但是,其中一个文件列是“复制”,并且 DictLikeObject 有复制方法,因此我无法获取该列的正确值。

考虑下面的代码:

class DictLikeObject(dict):

def __getattr__(self, key):
try:
return self[key]
except AttributeError:
raise ValueError("Not Found")

def copy(self):
pass

row = DictLikeObject()
row['copy'] = 1;
row['state'] = 'completed'

print(getattr(row, 'state'))
completed

print(getattr(row, 'copy'))
<bound method DictObject.copy of {'copy': 1, 'state': 'completed'}>

有没有办法确保 getattr 返回“copy”属性的值,而不是方法?

最佳答案

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

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

输出将是

1
completed

尽管如果您想使用 getattr,您可以覆盖 __getattribute__相反

class DictLikeObject(dict):

#Overrode getattribute
def __getattribute__(self, key):
try:
return self[key]
except AttributeError:
raise ValueError("Not Found")

def copy(self):
pass

row = DictLikeObject()
row['copy'] = 1
row['state'] = 'completed'

print(getattr(row, 'state'))
print(getattr(row, 'copy'))

输出将是

completed
1

关于python - 如何处理Python dict之类对象中的名称冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56674869/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com