Parametrized inheritance

Miki Tebeka miki.tebeka at zoran.com
Sun Jan 4 09:44:39 CET 2004


Hello Dan,

> i.e. define Sub as "class Sub(X)", where I can change X at the time of
> instantiation.  Then I could define MySub as "class MySub(Sub(MyBase))".
> (I hope that it's obvious that I'm looking for this effect, not this syntax)
>>> class Woof:
	def say(self):
		print "woof"

		
>>> class AlsoWoof:
	pass

>>> a = AlsoWoof()
>>> a.say()

Traceback (most recent call last):
  File "<pyshell#75>", line 1, in -toplevel-
    a.say()
AttributeError: AlsoWoof instance has no attribute 'say'
>>> AlsoWoof.__bases__ += (Woof,)
>>> a = AlsoWoof()
>>> a.say()
woof
>>> 

> Of course, someone is going to ask "why?"
> I need to override a few members in Base.  Sub is mostly fine as-is, so if I
> could have MySub=Sub(MyMBase), that would be fine.
Why don't just override them in the subclass as usuall?
>>> class Base:
	def f(self):
		print "base"

		
>>> class Sub(Base):
	def f(self):
		print "sub"

		
>>> s = Sub()
>>> s.f()
sub

HTH.
Miki



More information about the Python-list mailing list