A question about inheritance

arserlom at gmail.com arserlom at gmail.com
Sat May 14 09:41:34 EDT 2005


Ok, thanks. I didn't know about new-style classes (I had learned python
from a book prior to them).

After reading about new-style classes, I find that your solution is
better because, using super (in general) avoids cl2 from having to know
the implementation details of cl1. This is  clearly explained in:

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

Also, when using new-style classes with IDLE, I found some problems
which I talk about in "Modifying CallTips.py to work with with
new-style classes in IDLE.", which I posted in this group.

Steven Bethard wrote:
> arserlom at gmail.com wrote:
> > Hello I have a question about inheritance in Python. I'd like to do
> > something like this:
> >
> >  class cl1:
> >   def __init__(self):
> >    self.a = 1
> >
> >  class cl2(cl1):
> >   def __init__(self):
> >    self.b = 2
> >
> > But in such a way that cl2 instances have atributes 'b' AND 'a'.
> > Obviously, this is not the way of doing it, because the __init__
> > definition in cl2 overrides cl1's __init__.
> >
> > Is there a 'pythonic' way of achieving this?
>
> If there's a chance you might have multiple inheritance at some point
in
> this hierarchy, you might also try using super:
>
> class cl1(object): # note it's a new-style class
>      def __init__(self):
>          self.a = 1
>
> class cl2(cl1):
>      def __init__(self):
>          super(cl2, self).__init__()
>          self.b = 2
>
> Note that you probably want a new-style class even if you chose not
to
> use super in favor of Jp Calderone's suggestion.  There are very few
> cases for using old-style classes these days.
> 
> STeVe




More information about the Python-list mailing list