> Err, you might want to explain what these things do instead of an > abstract description of how you are doing it. It looks like you are > using inheritance in the normal way _and_ you are using it to handle > versioning of some kind (maybe stable interface releases? I don't know). > > Let us know what parts need inheritance for, and what you have > just been using a side effect of inheritance for as a convenience > (versioning, I think). > > A more concrete example would be easier to comment on, if possible > do a simple one (maybe just two classes with two versions each). > > -jackdied
I intentionally abstracted the problem to remove the irrelevant details, but here's a more concrete (though still simplified) example. I hope it is more clear now. George #============================= def worldModelFactory(version): if version < 2: return WorldModel() else: return WorldModel_v2() class WorldModel(object): def __init__(self): self.ourGoal = self.FieldObject(x=-50, y=0) self.theirGoal = self.FieldObject(x=+50, y=0) self.ball = self.MovableObject() self.teammates = [self.Player(i) for i in xrange(1,12)] self.opponents = [self.Player(i) for i in xrange(1,12)] class FieldObject(object): def __init__(self, id=None, x=0, y=0): self.id = id self._pos = (x,y) def position(self): '''Get or estimate the current position.''' return self._pos class MovableObject(FieldObject): def speed(self): '''Get or estimate the current speed.''' # [implementation snipped] class Player(MovableObject): def passBall(self,power,teammate): '''Pass the ball to the teammate.''' # [implementation snipped] class WorldModel_v2(WorldModel): class FieldObject(WorldModel.FieldObject): '''New implementation of FieldObject.''' def position(self): # [new implementation snipped] pass class MovableObject(WorldModel.MovableObject, FieldObject): '''MovableObject didn't change since the previous version. The only reason for this class is to make WorldModel_v2.FieldObject accessible to WorldModel_v2.Player. ''' pass class Player(WorldModel.Player, MovableObject): '''New implementation of Player.''' def passBall(self,power,teammate): # WorldModel_v2.FieldObject.position() should be called myPosition = self.position() # [new implementation snipped] #============================= -- http://mail.python.org/mailman/listinfo/python-list