What are the proper ways of adding a common set of method/properties to subclasses derived from the same class?
Let's say that these are my classes that I need for a videogame based on animals (it's just an example, I am not really writing a game but the idea is the same)
class Animal():
def __init(self, numlegs):
self.numlegs = numlegs
class Dog(Animal):
def __init(self, numlegs):
Animal.__init__(self, numlegs)
def bark(self):
print "Arf!"
class Cat(Animal):
def __init(self, numlegs):
Animal.__init__(self, numlegs)
def playwithmouse(self):
print "It's fun!"
class Duck(Animal):
def __init(self, numlegs):
Animal.__init__(self, numlegs)
def fly(self):
print "Weee!"
At a certain point in the game Dog and Duck can be weaponized, and they need to have the same methods: fire(), reload() and properties: ammocount.
I don't think it would be correct to add them in the Animal() class, because they will be needed in a completely different part of the game.
What would be the correct approach to add them?
update I wanted to add that the expected result is some kind of Animal - Weapon Hybrid Class like
class BurtalDuck(Duck):
fire(): #<- this is somehow added to Duck
print "ratatatatat!"
What I get from the answers is that if I need the whole set of "weapons/ammos" I can use multiclassing, otherwise composition is the way to go.