Python:subclassing frozenset不可迭代?

Jes*_*cia 1 python types set subclassing python-2.7

对于iterables,子类化冷冻集和集合似乎不起作用.尝试运行以下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
Run Code Online (Sandbox Code Playgroud)

第二个for回归:

for y in B:
TypeError: 'type' object is not iterable
Run Code Online (Sandbox Code Playgroud)

关于如何解决这个问题的任何想法?

如果你问自己为什么我想使用freezeset,那就是我试图创建一组元组.元组集将被冻结,元组集将成为一组.

我使用Python-2.7

Bre*_*arn 5

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

class MonFrozenSet(frozenset):
    def __new__(cls, data):
        return super(MonFrozenSet,cls).__new__(cls, data)
Run Code Online (Sandbox Code Playgroud)

然后:

>>> a = MonFrozenSet([1, 2, 3])
>>> for item in a:
...     print item
1
2
3
Run Code Online (Sandbox Code Playgroud)