Thanks! Is there a name for the type of myopia that develops after staring at the computer screen too long?
-Chris --- Jason Massey <[EMAIL PROTECTED]> wrote: > Christopher, > > I copied and pasted your code and it worked only a > few modifications. The > thing I had to change was the indention level of > the: > > def __and__(self, other): return > self.intersect(other) > def __or__(self, other): return self.union(other) > def __repr__(self): return 'Set:' + > list.__repr__(self) > > statements. These statements need to be on the same > indention level as your > __init__, intersection and union satements. > > Here's what I got: > > class Set(list): > def __init__(self, value=[]): > list.__init__([]) > self.concat(value) > > def intersect(self, other): > res = [] > for x in self: > if x in other: > res.append(x) > return Set(res) > > def union(self, other): > res = Set(self) > res.concat(other) > return res > > def concat(self, value): > for x in value: > if not x in self: > self.append(x) > > def __and__(self, other): return > self.intersect(other) > def __or__(self, other): return > self.union(other) > def __repr__(self): return 'Set:' + > list.__repr__(self) > > if __name__ == '__main__': > x = Set([1,3,5,7]) > y = Set([2,1,4,5,6]) > print x, y, len(x) > print x.intersect(y), y.union(x) > print x & y, x | y > x.reverse(); > print x > > On 1/23/06, Christopher Spears > <[EMAIL PROTECTED]> wrote: > > > > I copied this code from Learning Python while > learning > > about extending types by subclassing: > > > > class Set(list): > > def __init__(self, value=[]): > > list.__init__([]) > > self.concat(value) > > > > def intersect(self, other): > > res = [] > > for x in self: > > if x in other: > > res.append(x) > > return Set(res) > > > > def union(self, other): > > res = Set(self) > > res.concat(other) > > return res > > > > def concat(self, value): > > for x in value: > > if not x in self: > > self.append(x) > > > > def __and__(self, other): return > self.intersect(other) > > def __or__(self, other): return self.union(other) > > def __repr__(self): return 'Set:' + > > list.__repr__(self) > > > > if __name__ == '__main__': > > x = Set([1,3,5,7]) > > y = Set([2,1,4,5,6]) > > print x, y, len(x) > > print x.intersect(y), y.union(x) > > print x & y, x | y > > x.reverse(); print x > > > > Here is the result: > > > > > [EMAIL PROTECTED]:/imports/home/cspears/Documents/Python/chap23> > > python setsubclass.py > > [1, 3, 5, 7] [2, 1, 4, 5, 6] 4 > > [1, 5] [2, 1, 4, 5, 6, 3, 7] > > Traceback (most recent call last): > > File "setsubclass.py", line 32, in ? > > print x & y, x | y > > TypeError: unsupported operand type(s) for &: > 'Set' > > and 'Set' > > > > According to the book, here is what I should get: > > > > Set:[1, 3, 5, 7] Set:[2, 1, 4, 5, 6] 4 > > Set:[1, 5] Set:[2, 1, 4, 5, 6, 3, 7] > > Set:[1, 5] Set:[1, 3, 5, 7, 2, 4, 6] > > Set:[7, 5, 3, 1] > > > > Problem 1: Why isn't "Set:" being printed? I > thought > > > > > > def __repr__(self): return 'Set:' + > > list.__repr__(self) > > > > would facilitate that. > > > > Problem 2: What is causing the TypeError? > > > > I'm pretty sure I copied this exactly from the > book, > > so I'm not sure what is not working. > > _______________________________________________ > > Tutor maillist - Tutor@python.org > > http://mail.python.org/mailman/listinfo/tutor > > > "I'm the last person to pretend that I'm a radio. I'd rather go out and be a color television set." -David Bowie "Who dares wins" -British military motto "I generally know what I'm doing." -Buster Keaton _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor