is this the right way to do subclasses?

Gabriel Genellina gagsl-py at yahoo.com.ar
Wed Nov 8 21:43:34 EST 2006


At Wednesday 8/11/2006 22:35, Ben Finney wrote:

>     class Character(object):
>         stat_keys = ['strength', 'dexterity', 'intelligence']
>         def __init__(self, name, stats):
>             self.name = name
>             self.health = 10
>             self.stats = {}
>             for (key, value) in [(k, stats.get(k)) for k in stat_keys]:
>                 setattr(self, key, value)

Doesn't work, should say self.stat_keys. I prefer this other way:

=== cut ===
class Character(object):
     stat_keys = ['strength', 'dexterity', 'intelligence']
     strength = dexterity = intelligence = 0
     def __init__(self, name, **stats):
         self.name = name
         self.health = 10
         for key, value in stats.iteritems():
             if key in self.stat_keys: setattr(self, key, value)
             else: raise KeyError, "Unknown stats name: %s" % key

class Cleric(Character):
     stat_keys = Character.stat_keys + ['holyness']
     holyness = 0

c=Cleric('Fray Tuck', strength=8, dexterity=5, holyness=2)
print vars(c)
=== cut ===

This way, misspelled properties are caught, and calling interfase is 
simple too. Also, class attributes provide default instance 
attributes - you don't have to provide an explicit value. Stats names 
are extensible as shown.


-- 
Gabriel Genellina
Softlab SRL 

__________________________________________________
Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis! 
¡Abrí tu cuenta ya! - http://correo.yahoo.com.ar



More information about the Python-list mailing list