Sriek wrote: > hi, > i come from a c++ background. i ws happy to find myself on quite > familiar grounds with Python. But, what surprised me was the fact that > the __init__(), which is said to be the equivlent of the constructor in > c++, is not automatically called.
What do you mean by automatically? : Python 2.4.1 (#2, May 5 2005, 09:45:41) [GCC 4.0.0 20050413 (prerelease) (Debian 4.0-0pre11)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> class A(object): ... def __init__(self): ... print "in __init__" ... >>> a = A() in __init__ So __init__ is definitely called upon instantiation. It is true that if you derive from A and override __init__, A.__init__ won't be called unless done so explicitly like: class B(A): def __init__(self): print "in B.__init__()" super(B, self).__init__() > I'm sure there must be ample reason > for this. I would like to know why this is so? This is my view is more > burden on the programmer. It isn't that much practical burden, and IMO it makes perfect sense. When you override a method of a class, you want to have to explicitly call superclass code, not have it run automatically, else you lose control of the flow. > Similarly, why do we have to explicitly use the 'self' keyword > everytime? This is closer to a wart, IMO, but once you've used Python for a while you'll come to understand why this is so. Basically, everything in Python is either a namespace or a name in a namespace. In the case of the self reference which Python sends as the first arg automatically, the method needs to bind that to a local name which is, by convention only, 'self'. > Every kind of help would be welcome. You've found the right place to hang out. Welcome! -- pkm ~ http://paulmcnett.com -- http://mail.python.org/mailman/listinfo/python-list