Witam. Mam problem z klasą setwrapper.SetSub. Klasa SetSub ma rozszerzać klasę Set i ma symulować dzialanie listy za pomocą zbioru. Gdy importuję w sesji interaktywnej moduł po czym próbuję wywołać konstruktor wywala mi coś takiego:
>>> from setwrapper import SetSub
>>> SetSub(1, 2, 3)
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/home/z3us/PycharmProjects/python_wprowadzenie/setwrapper.py", line 46, in __init__
super(SetSub, self).__init__(value)
File "/home/z3us/PycharmProjects/python_wprowadzenie/setwrapper.py", line 3, in __init__
self.data = []
File "/home/z3us/PycharmProjects/python_wprowadzenie/setwrapper.py", line 58, in __setattr__
if value not in self.data:
File "/home/z3us/PycharmProjects/python_wprowadzenie/setwrapper.py", line 52, in __getattr__
if item in self.data:
File "/home/z3us/PycharmProjects/python_wprowadzenie/setwrapper.py", line 52, in __getattr__
if item in self.data:
File "/home/z3us/PycharmProjects/python_wprowadzenie/setwrapper.py", line 52, in __getattr__
if item in self.data:
[Previous line repeated 983 more times]
RecursionError: maximum recursion depth exceeded
Kod:
class Set:
def __init__(self, value=[]):
self.data = []
self.concat(value)
def intersect(self, other):
res = []
for x in self.data:
if x in other:
res.append(x)
return Set(res)
def union(self, other):
res = self.data[:]
for x in other:
if not x in res:
res.append(x)
return Set(res)
def concat(self, value):
for x in value:
if not x in self.data:
self.data.append(x)
def __len__(self):
return len(self.data)
def __getitem__(self, item):
return self.data[item]
def __and__(self, other):
return self.intersect(other)
def __or__(self, other):
return self.union(other)
def __repr__(self):
return 'Zbiór: ' + repr(self.data)
def __iter__(self):
return iter(self.data)
class SetSub(Set):
def __init__(self, *value):
super(SetSub, self).__init__(value)
def __add__(self, other):
return self | other
def __getattr__(self, item):
if item in self.data:
return self.data[item]
else:
raise IndexError()
def __setattr__(self, key, value):
if value not in self.data:
self.data[key] = value
def append(self, item):
if item not in self.data:
self.data.append(item)