Extending classes __init__behavior for newbies
MRAB
python at mrabarnett.plus.com
Sun Feb 13 17:21:56 EST 2011
On 13/02/2011 22:00, James Mills wrote:
> On Mon, Feb 14, 2011 at 7:17 AM, Benjamin J. Racine
> <bjracine at glosten.com> wrote:
>> I don't quite understand the interplay of the two different __init__ methods
>> when trying to extend a class. Below is my hack attempt at doing so...
>> class ship(object):
>> def __init__(self,l=0,b=0,t=0,name=''):
>> self.l = l
>> self.b = b
>> self.t = t
>> self.name = name
>> def make_it_deeper(self,t):
>> self.t = self.t - t
>> class fast_ship(ship):
>> def __init__(self,speed = 0):
>> self.speed = speed
>> my_ship = fast_ship(l = 100,b = 50, t = 10, name = 'cutter',speed = 10)
>>
>> If anyone would be so kind as to show me how to get the intended effect that
>> I've hinted at, I would be most grateful,
>
> When you subclass a base class (ship in your example) you need
> to call it's parent (or super) methods. This includes the constructor
> (__init__).
>
> The standard way of doing this in Python is:
>
> class FasterShip(Ship):
>
> def __init__(self, l=0,b=0,t=0,name='', speed=0):
> super(FasterShip, self).__init__(l, b, t, name)
>
> self.speed = speed
>
> This ensures that the constructor of the base class (Ship) gets called
> and the object initialized with the attributes you've defined.
>
> Note for convention reasons I've also included proper class names
> in the example. Classes normally start with an Upper case letter.
>
I would've done it this way:
class FasterShip(Ship):
def __init__(self, speed=0, **kwargs):
Ship.__init__(self, **kwargs)
self.speed = speed
More information about the Python-list
mailing list