2014-06-07 3 views
1

froerenset을 서브 클래스 화하고 set은 iterables에 관해서는 똑같이 작동하지 않는 것처럼 보입니다.Python : 하위 클래스의 frozenset이 반복 가능하지 않습니까?

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 

나는이 문제를 해결할 수있는 방법에 대한 아이디어를 다음 MWE를 실행하려고?

왜 내가 frozenset을 사용하고 싶은지 묻는다면, 나는 튜플 세트를 만들려고합니다. 튜플 세트는 어둡고 일련의 튜플 세트는 세트가됩니다.

내가 사용하는 파이썬 2.7

답변

5

당신이 슈퍼 클래스의 __new__,하지의 __init__를 호출 할 필요가 __new__를 오버라이드 (override). 또한 __new__이 클래스 메서드이므로 self (더 나은 이름은 cls)을 전달해야합니다. 또한 결과를 반환해야합니다. __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 
+0

. 감사. –