gpt4 book ai didi

Python:重载元组多重赋值能力?

转载 作者:太空狗 更新时间:2023-10-29 20:19:14 24 4
gpt4 key购买 nike

所以我创建了自己的基于字典的命名元组类:

class t(dict):
def __getattr__(self, v):
try:
return self[v]
except KeyError:
raise AttributeError("Key " + str(v) + " does not exist.")
def __init__(self, *args, **kwargs):
for source in args:
for i, j in source.items():
self[i] = j
for i, j in kwargs.items():
self[i] = j

>>> thing = t(cow=10, moo='moooooooo')
>>> thing.cow
10
>>> thing.moo
'moooooooo'

使用 dict 的目的是让我可以使用 **splat 运算符,并且整个事情都可以作为 dict 进行 json 处理。 init 中的双 for 循环使我可以在反序列化后立即从 dict 重新构造它。

我唯一缺少的是你可以用元组做的多重赋值,比如

>>> thing = (1, 3, ('blargh', 'mooo'))
>>> a, b, (c, d) = thing
>>> a
1
>>> b
3
>>> c
'blargh'
>>> d
'mooo'

有什么方法可以用我自己的自定义数据类型获得这种行为吗?是否有任何我可以覆盖的函数或我可以继承的某些类来获得这种行为?

最佳答案

是的。实现 __iter__()

class unpackable_dict(dict):
def __iter__(self):
return (self[key] for key in sorted(self.keys()))

d = unpackable_dict(a=1, b=2)
a, b = d

您通常不能像解包元组那样从字典中解包值的原因是字典没有定义的顺序。我使用生成器表达式按照键的排序顺序取出项目。不过,您可能会考虑改用 OrderedDict

关于Python:重载元组多重赋值能力?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7117331/

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