Christopher,<br>
<br>
I copied and pasted your code and it worked only a few
modifications.&nbsp; The thing I had to change was the indention level
of the:<br>
<br>
def __and__(self, other): return self.intersect(other)<br>
def __or__(self, other): return self.union(other)<br>
def __repr__(self): return 'Set:' + list.__repr__(self)<br><br><div><span class="gmail_quote">statements.&nbsp; These statements need to be on the same indention level as your __init__, intersection and union satements.<br>
<br>
Here's what I got:<br>
<br>
class Set(list):<br>
&nbsp;&nbsp;&nbsp; def __init__(self, value=[]):<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; list.__init__([])<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; self.concat(value)<br>
<br>
&nbsp;&nbsp;&nbsp; def intersect(self, other):<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; res = []<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for x in self:<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if x in other:<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; res.append(x)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return Set(res)<br>
<br>
&nbsp;&nbsp;&nbsp; def union(self, other):<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; res = Set(self)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; res.concat(other)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return res<br>
<br>
&nbsp;&nbsp;&nbsp; def concat(self, value):<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for x in value:<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if not x in self:<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; self.append(x)<br>
<br>
&nbsp;&nbsp;&nbsp; def __and__(self, other): return self.intersect(other)<br>
&nbsp;&nbsp;&nbsp; def __or__(self, other): return self.union(other)<br>
&nbsp;&nbsp;&nbsp; def __repr__(self): return 'Set:' +&nbsp;&nbsp;&nbsp; list.__repr__(self)<br>
<br>
if __name__ == '__main__':<br>
&nbsp;&nbsp;&nbsp; x = Set([1,3,5,7])<br>
&nbsp;&nbsp;&nbsp; y = Set([2,1,4,5,6])<br>
&nbsp;&nbsp;&nbsp; print x, y, len(x)<br>
&nbsp;&nbsp;&nbsp; print x.intersect(y), y.union(x)<br>
&nbsp;&nbsp;&nbsp; print x &amp; y, x | y<br>
&nbsp;&nbsp;&nbsp; x.reverse(); <br>
&nbsp;&nbsp;&nbsp; print x<br>
<br>
On 1/23/06, <b class="gmail_sendername">Christopher Spears</b> &lt;<a href="mailto:cspears2002@yahoo.com">cspears2002@yahoo.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
I copied this code from Learning Python while learning<br>about extending types by subclassing:<br><br>class Set(list):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def __init__(self, value=[]):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.__init__([])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.concat
(value)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def intersect(self, other):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;res = []<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for x in self:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if
x in other:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;res.append(x)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return Set(res)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def union(self, other):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;res = Set(self)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;res.concat(other)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return res
<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def concat(self, value):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for x in value:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if
not x in self:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.append(x)<br><br>def __and__(self, other): return self.intersect(other)<br>def __or__(self, other): return self.union(other)<br>def __repr__(self): return 'Set:' +<br>
list.__repr__(self)<br><br>if __name__ == '__main__':<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x = Set([1,3,5,7])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y = Set([2,1,4,5,6])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print x, y, len(x)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print x.intersect(y), y.union(x)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print x &amp; y, x | y
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x.reverse(); print x<br><br>Here is the result:<br><br>cspears@iaws09:/imports/home/cspears/Documents/Python/chap23&gt;<br>python setsubclass.py<br>[1, 3, 5, 7] [2, 1, 4, 5, 6] 4<br>[1, 5] [2, 1, 4, 5, 6, 3, 7]
<br>Traceback (most recent call last):<br>&nbsp;&nbsp;File &quot;setsubclass.py&quot;, line 32, in ?<br>&nbsp;&nbsp;&nbsp;&nbsp;print x &amp; y, x | y<br>TypeError: unsupported operand type(s) for &amp;: 'Set'<br>and 'Set'<br><br>According to the book, here is what I should get:
<br><br>Set:[1, 3, 5, 7] Set:[2, 1, 4, 5, 6] 4<br>Set:[1, 5] Set:[2, 1, 4, 5, 6, 3, 7]<br>Set:[1, 5] Set:[1, 3, 5, 7, 2, 4, 6]<br>Set:[7, 5, 3, 1]<br><br>Problem 1:&nbsp;&nbsp;Why isn't &quot;Set:&quot; being printed?&nbsp;&nbsp;I thought<br>
<br><br>&nbsp;&nbsp; def __repr__(self): return 'Set:' +<br>list.__repr__(self)<br><br>would facilitate that.<br><br>Problem 2: What is causing the TypeError?<br><br>I'm pretty sure I copied this exactly from the book,<br>so I'm not sure what is not working.
<br>_______________________________________________<br>Tutor maillist&nbsp;&nbsp;-&nbsp;&nbsp;<a href="mailto:Tutor@python.org">Tutor@python.org</a><br><a href="http://mail.python.org/mailman/listinfo/tutor">http://mail.python.org/mailman/listinfo/tutor
</a><br></blockquote></div><br>