What's the best way to write this base class?

bruno.desthuilliers at gmail.com bruno.desthuilliers at gmail.com
Sat Jun 18 09:37:56 EDT 2011


On 18 juin, 13:24, Tim Chase <python.l... at tim.thechases.com> wrote:
> On 06/18/2011 05:55 AM, bruno.desthuilli... at gmail.com wrote:
>
> > On 18 juin, 06:17, John Salerno<johnj... at gmail.com>  wrote:
> >> class Character:
>
> >>      base_health = 50
> >>      base_resource = 10
>
> >>      def __init__(self, name):
> >>          self.name = name
> >>          self.health = base_health
> >>          self.resource = base_resource
>
> > Did you at least tried this one ? Hint: it won't work.
>
> If you want it, you can use
>
>    self.health = Character.base_health
>
> Though I'd treat them as semi-constants and capitalize them like
> your 3rd case:
>
>    class Character(object):
>      BASE_HEALTH = 50
>      ...
>      def __init__(...):
>        ...
>        self.health = Character.BASE_HEALTH
>


If you go that way, then using polymorphic dispatch might (or not,
depending on the game's rules <g>) be a good idea:


class Character(object):
    BASE_HEALTH = 50
    ...
    def __init__(self, name):
        ...
        self.health = type(self).BASE_HEALTH


This would allow different Character subclasses to have different
BASE_HEALTH etc..., defaulting to the base class values.




More information about the Python-list mailing list