gpt4 book ai didi

python - 构造一个可以映射或解压缩的对象

转载 作者:太空宇宙 更新时间:2023-11-03 12:07:49 24 4
gpt4 key购买 nike

所以我有这个(当然真实的东西更复杂):

class test(object):
i = -1

def keys(self):
return ["a", "b"]

def __getitem__(self, item):
return {"a": 0, "b": 1}[item]

def __len__(self):
return 2

def __contains__(self, item):
if item in ["a", "b"]:
return True
return False

def __iter__(self):
return self

def next(self):
self.i += 1
if self.i > 1:
raise StopIteration()

return ["a", "b"][self.i]

我想做的是这个(同样真实的事情更复杂):

> t = test()
> dict(t)
{'a': 0, 'b': 1}
> dict(**t)
{'a': 0, 'b': 1}

这很完美,但是如果我将类定义为 dict 的子类,则无法正常工作,这就是我想要的,我希望我的对象表现得像一个带有一些隐藏技巧的 dict(并再次确保它在实际代码中更有意义):

class test(dict):
.... same code here ....

在这种情况下,dict(t)dict(**t) 将返回一个空字典 {},但是 [k for k in t] 将返回 ['a','b']

我想念什么?看来我确实需要重新声明一些 dict 函数,尽管 __getitem__、__iter__、__len__、__contains__ 和 keys 方法足以解决问题。我试图重新声明 iterkeys、itervalues、copy、get 等,但似乎没有任何效果。

谢谢。

最佳答案

 class test(dict):
i = -1

def __init__(self):
super(test, self).__init__({"a": 0, "b": 1})

def keys(self):
return ["a", "b"]

def __getitem__(self, item):
return {"a": 0, "b": 1}[item]

def __len__(self):
return 2

def __contains__(self, item):
if item in ["a", "b"]:
return True
return False

def __iter__(self):
return self

def next(self):
self.i += 1
if self.i > 1:
raise StopIteration()

return ["a", "b"][self.i]

t = test()
print dict(t)
# output: {'a': 0, 'b': 1}
print dict(**t)
# output: {'a': 0, 'b': 1}

当然,在类定义中硬编码 {'a': 0, 'b': 1} 并不是一个好主意。

关于python - 构造一个可以映射或解压缩的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22537548/

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