is this the right way to do subclasses?
Ben Finney
bignose+hates-spam at benfinney.id.au
Wed Nov 8 20:35:09 EST 2006
John Salerno <johnjsal at NOSPAMgmail.com> writes:
> Ok, back to my so-called "game." I'm just curious if I've
> implemented the subclasses properly, because it seems like an awful
> lot of repetition with the parameters. And again, if I want to add a
> new attribute later, I'd have to change a lot of things. I can't
> help but get the feeling that I'm doing something very
> inefficiently.
This is another reason why passing the "stats" values as a mapping
object is a good alternative.
> class Character(object):
> def __init__(self, name, strength, dexterity, intelligence):
> self.name = name
> self.health = 10
> self.strength = strength
> self.dexterity = dexterity
> self.intelligence = intelligence
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)
> class Fighter(Character):
> def __init__(self, name, strength, dexterity, intelligence):
> Character.__init__(self, name, strength, dexterity, intelligence)
> self.health += 2
> self.strength += 1
class Fighter(Character):
def __init__(self, name, stats):
Character.__init__(self, name, stats)
self.health += 1
self.strength += 1
et cetera.
All you need to do to add a new type of "stat" is to add a new item to
the 'stat_keys' list in Character.
--
\ "I bought a self learning record to learn Spanish. I turned it |
`\ on and went to sleep; the record got stuck. The next day I |
_o__) could only stutter in Spanish." -- Steven Wright |
Ben Finney
More information about the Python-list
mailing list