"zzzzz" <zzizz_ at notmail.com> wrote in message news:17ogct0jjvuhnb8g8ji9uqh011egdn0l2b at 4ax.com... > Hi all, I have overwridden the __add__ method for a class, then built > a class based on the above class; however, the object I'm returning is > of the base class not the inherited class. If that doesn't make sense > see below: > > class A: > def __init__(self,value=0.0) > self._value=float(value) > def __add__(self,other) > return A(self._value+other._value) > > class B(A): > pass > > x=B(3) > y=B(2) > z=x+y > > The way I've done it z becomes an instance of A not B!!! How do I do Right, it does -- it is constructed (by A's method __add__) with a hardwired 'A'. > it correctly? Do I have to override all the __add__, __sub__, etc... > methods? If I understand your desire correctly, changing the definition of A's method __add__ to: def __add__(self,other) return self.__class__(self._value+other._value) might accomplish a part of it. Of course, this may not be quite enough -- what if the LH operand is an A but the RH one is a B, for example -- choosing what class to use to generate the needed result may be very complex, but I hope this gets you started. Alex
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4