TypeError when subclassing 'list'
looping
kadeko at gmail.com
Mon Feb 27 06:36:09 EST 2006
Gerard Flanagan wrote:
> Hello all
>
> Could anyone shed any light on the following Exception? The code which
> caused it is below. Uncommenting the 'super' call in 'XmlNode' gives
> the same error. If I make XmlNode a subclass of 'object' rather than
> 'list' then the code will run.
>
> Thanks in advance.
>
> Exception:
>
> Traceback (most recent call last):
> File "C:\Program
> Files\Python\Python24\Lib\site-packages\pythonwin\pywin\framework\scriptutils.py",
> line 310, in RunScript
> exec codeObject in __main__.__dict__
> File "C:\Documents and Settings\Gerard\My
> Documents\Scripts\Python\XmlNode\XmlNode.py", line 5, in ?
> class XmlNode(list):
> TypeError: Error when calling the metaclass bases
> __init__() takes at most 2 arguments (4 given)
>
> Code:
>
> from elementtree.SimpleXMLWriter import XMLWriter
>
> class XmlNode(list):
> tag = None
> attrib = None
> value = None
> def __init__(self, tag, **attrib):
> #super(list, self).__init__()
> self.tag = tag
> self.attrib = attrib
>
> def __repr__(self):
> return "<XmlNode %s at %x>" % (self.tag, id(self))
>
> def write(self, writer):
> writer.start(self.tag, self.attrib)
> if self.value is not None:
> writer.data(self.value)
> ## for node in self:
> ## node.write(writer)
> writer.end()
>
> class HtmlElement(XmlNode):
> def __init__(self, tag, value='', **attrib):
> super(HtmlElement, self).__init__(tag=tag, **attrib)
> self.value = value
>
> class li(HtmlElement):
> def __init__(self, value=None, **attrib):
> super(li, self).__init__(tag='li', **attrib)
>
> class ul(HtmlElement):
> def __init__(self, **attrib):
> super(ul, self).__init__(tag='ul', **attrib)
>
> if __name__ == '__main__':
> from StringIO import StringIO
>
> item = li('item')
> items = ul()
> #items.apppend(item)
> out = StringIO()
> writer = XMLWriter(out)
> items.write(writer)
> print
> print out.getvalue()
> out.close()
> #super(list, self).__init__()
I think this line must be:
super(XmlNode, self).__init__()
But just a guess...
More information about the Python-list
mailing list