inheritance problem

Mike C. Fletcher mcfletch at rogers.com
Tue Oct 1 15:11:21 EDT 2002


super is a new feature in Python 2.2, it was created to make it possible 
to have mix-in classes where you don't _know_ what the super-class is. 
It also avoids some errors/maintenance work where base-classes changed 
names so that the sub-classes suddenly generated NameErrors.

That said, it's only available in Python 2.2 and above, and although 
Python 2.2.x is the target for the current "stable" Python, it's not 
universally adopted yet, so code using super will not work on every 
Python installation (i.e. it won't work on Python 1.5.2 or 2.1).

So, yes, it's better from a theoretical standpoint (it encodes the 
meaning of the call (call my super-class' method) explicitly ("explicit 
is better than implicit")), but in practical terms, if you are writing 
libraries that need to be backward compatible with old Pythons, then the 
explicit class-name approach is better.

Also note, a number of people advocated the following approach with 
earlier Pythons:

class B( A ):
	_super_b = A.b
	_super_a = A.a
	def b( self ):
		return self._super_b() + 'C'

Which is more up-front work, but does make the inheritance and 
overloading of methods explicit in the code, which some people like :) . 
  Personally, I've just moved to Python 2.2 for everything save PyOpenGL 
and SimpleParse and if people need to use the other modules, they need 
to upgrade, which lets me use all the neat 2.2 features :) .

Enjoy,
Mike

gabor wrote:
...
> 
> btw. "super(C,self).__init__()" is better than "A.__init(self)"?
> or simply has the adventage that you don't have to specify the
> superclass?
> 
> thanks again,
> gabor
...





More information about the Python-list mailing list