A question about inheritance

Steven Bethard steven.bethard at gmail.com
Sun May 8 18:18:22 EDT 2005


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