gpt4 book ai didi

Python:子类化 frozenset 不可迭代?

转载 作者:太空宇宙 更新时间:2023-11-04 09:02:21 25 4
gpt4 key购买 nike

对于可迭代对象,子类化 frozenset 和 set 似乎并不相同。尝试运行以下 MWE:

class MonFrozenSet(frozenset):
def __new__(self, data):
super(MonFrozenSet,self).__init__(data)
return self

class MonSet(set):
def __init__(self, data):
super(MonSet,self).__init__(data)



x=(1,2,3,4)

A=MonSet(x)
B=MonFrozenSet(x)

for y in A: #Works
print y

for y in B: #Doesn't work
print y

第二个 for 返回:

for y in B:
TypeError: 'type' object is not iterable

关于如何解决这个问题有什么想法吗?

如果您问自己为什么要使用 frozenset,答案是我正在尝试创建一组元组集。元组的集合将被卡住,元组的集合将成为一个集合。

我使用 Python-2.7

最佳答案

当覆盖 __new__ 时,您需要调用父类(super class)的 __new__,而不是它的 __init__。此外,您需要传递 self(更好地命名为 cls),因为 __new__ 是一个类方法。此外,您需要返回结果,因为 __new__ 实际上创建了一个对象,它不会修改 self。所以:

class MonFrozenSet(frozenset):
def __new__(cls, data):
return super(MonFrozenSet,cls).__new__(cls, data)

然后:

>>> a = MonFrozenSet([1, 2, 3])
>>> for item in a:
... print item
1
2
3

关于Python:子类化 frozenset 不可迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24100088/

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