Frank Millman wrote: > Hi all > > Assume a simple class - > > class Test(object): > def __init__(self,x): > self.x = x > def getx(self): > print self.x > > Test(1).getx() > Test(2).getx() > Test(3).getx() > > As expected, the results are 1,2,3 > > Assume a slight variation, where given a particular condition I want a > particular method to behave differently. I know that I could subclass, > but for various reasons I preferred to do it this way - > > class Test(object): > def __init__(self,x,y=False): > self.x = x > if y: > self.getx = self.getx2 > def getx(self): > print self.x > def getx2(self): > print self.x * 2 > > Test(1).getx() > Test(2,True).getx() > Test(3).getx() > > As expected, the results are 1,4,3 > > Now assume a subclass of the above class, where I want the method to > behave diferently again - > > class Test2(Test): > def __init__(self,x,y=False): > Test.__init__(self,x,y) > def getx(self): > print self.x*3 > > Test2(1).getx() > Test2(2,True).getx() > Test2(3).getx() > > Here I was hoping that the results would be 3,6,9 but they are 3,4,9. >
Ok, on reflection I more or less understand what is happening, and I have found an ugly workaround - class Test2(Test): def __init__(self,x,y=False): getx = self.getx Test.__init__(self,x,y) self.getx = getx def getx(self): print self.x*3 Test2(1).getx() Test2(2,True).getx() Test2(3).getx() Now I get 3,6,9 as intended. I would still appreciate any comments, especially if someone can suggest a better approach. Thanks Frank -- http://mail.python.org/mailman/listinfo/python-list