Steven Bethard wrote:

So when I'm writing a class and I define an __init__ method, I sometimes haven't called object.__init__, e.g.:

    class C(object):
        def __init__(self, x):
            self.x = x

instead of

    class C(object):
        def __init__(self, x):
            super(C, self).__init__()
            self.x = x

Looking at:

   http://www.python.org/2.2.3/descrintro.html#__new__
   "The built-in type 'object' has a dummy __new__ and a dummy __init__"

seems to suggest that the super call here is unnecessary. It's also not made in the Super class example from that document:

    http://www.python.org/2.2.3/descrintro.html#superexample

I'm trying to get in the habit of calling super in all __init__ methods, but it seems like it's unnecessary when the only superclass is object.
Assuming that the base class of C doesn't get changed from object, are there consequences of not making this call?


The principal one that I can see is that you are relying on this implementation feature to maintain forward compatibility, since I'm not aware of any pronouncement that says "object will *always* have a dummy __init__".

There's also the possibility that you might want to use a different base class later (for example, setting

    object = mySuperDebugObject

for debugging purposes). If that object has an __init__() method you'll have to put the calls in then anyway.

Perhaps a relevant question is how long it takes to call the __init__ method using super.

[EMAIL PROTECTED] ~/Projects/PyCON2005
$ python /usr/lib/python2.4/timeit.py -s "
class C(object):
  def __init__(self, x):
    self.x = x"  "C(1)"
100000 loops, best of 3: 2.69 usec per loop

[EMAIL PROTECTED] ~/Projects/PyCON2005
$ python /usr/lib/python2.4/timeit.py -s "
class C(object):
  def __init__(self, x):
    super(C, self).__init__()
    self.x = x"  "C(1)"
100000 loops, best of 3: 5.58 usec per loop

So, even on my cronky old 1.3 GHz laptop [1] you only lose 3 microseconds per object creation. You'll have to decide how significant that is.

regards
 Steve

[1]: Freaky - I had just typed this when the doorbell went, and it was the UPS driver delivering the new laptop!
--
Steve Holden http://www.holdenweb.com/
Python Web Programming http://pydish.holdenweb.com/
Holden Web LLC +1 703 861 4237 +1 800 494 3119
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to