首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:子类frozenset不可迭代?

Python:子类frozenset不可迭代?
EN

Stack Overflow用户
提问于 2014-06-07 17:57:21
回答 1查看 811关注 0票数 1

子类、frozenset和set在可迭代性方面似乎不一样。尝试运行以下MWE:

代码语言:javascript
复制
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返回:

代码语言:javascript
复制
for y in B:
TypeError: 'type' object is not iterable

知道我怎么能解决这个问题吗?

如果你们在问自己为什么我想使用冷藏箱,那就是我正在尝试创建一组元组。元组集将被冻结,而元组集将是一组元组。

我使用Python-2.7

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-07 17:59:12

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

代码语言:javascript
复制
class MonFrozenSet(frozenset):
    def __new__(cls, data):
        return super(MonFrozenSet,cls).__new__(cls, data)

然后:

代码语言:javascript
复制
>>> a = MonFrozenSet([1, 2, 3])
>>> for item in a:
...     print item
1
2
3
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24100088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档