[Tutor] why BaseClass.__init__ needs to be called explicitly?

alan.gauld@bt.com alan.gauld@bt.com
Mon, 17 Dec 2001 18:35:05 -0000


> 1. I was just wondering why does'nt python call the base 
> class constructor automatically like in java? 

Theres several ways to view this, first __init__() 
isn't really a constructor - its called *after* the 
class is constructed. Its an initialisation hook...

Secondly, Java is unusual in this regard if it calls 
superclass constructors implicitly(I didn't actually 
realise it did that!). C++ which does have 
constructors and several other compiled languages 
require explicit calling of the base class constructor.

There is an advantage to this in that you can 
effectively override the base constructor, 
although its a fairly dangerous thing to do IMHO!


> I noticed that it does provided i don't've a
> __init__() in the derived class.

Thats because being an initialisation function it
gets called automatically after creation. Python 
just calls self.__init__() and that goes through 
the usual python tree search for a version of 
init() to run if none exists in the immediate 
object.

> Is there any specific reason behind this...

Its a good thing coz it offers more control to
the programmer.

> something to do with scripting languages?

Nope, nothing to do with scripting per se.

> 2. do we have a search facility on tutor/python-list sites? 

The ActiveState archive is searchable.

Alan G