sax.handler.Contenthandler.__init__

Prasad, Ramit ramit.prasad at jpmorgan.com.dmarc.invalid
Fri Aug 30 13:35:42 EDT 2013


Neil Cerutti wrote:
> This code is from The Python Cookbook, 2nd edition, 12.2 Counting
> Tags in a Document:
> 
> from xml.sax.handler import ContentHandler
> import xml.sax
> class countHandler(ContentHandler):
>     def __init__(self):
>         self.tags={}
>     def startElement(self, name, attr):
>         self.tags[name] = 1 + self.tags.get(name, 0)
> 
> Isn't overriding __init__ a risky thing to do? The docs don't
> mention it as a method I should override, and also don't define
> what's in there or if I'd need to call the base class __init__.
> Moreover, startDocument is provided for parser setup.
> 
> As it happens, ContentHandler.__init__ isn't empty, so the above
> code could fail if the parser isn't prepared for _locator to be
> undefined.
> 
> Is the above code is an acceptable idiom?
> 
> --
> Neil Cerutti
> --

I think this is a bad idea unless you want to avoid the parent 
class __init__ specifically (in which case a comment stating 
why is mandatory). I do not like that this recipe shows behavior
that might be fine in this instance, but is not a good general 
practice.

     def __init__(self):
         super(ContentHandler, self).__init__()
         #OR ContentHandler.__init__(self)
         self.tags={}

I personally think the super() line is better of the two options.

~Ramit



This email is confidential and subject to important disclaimers and conditions including on offers for the purchase or sale of securities, accuracy and completeness of information, viruses, confidentiality, legal privilege, and legal entity disclaimers, available at http://www.jpmorgan.com/pages/disclosures/email.  



More information about the Python-list mailing list