compile error when using override
Ho Yeung Lee
jobmattcon at gmail.com
Thu Dec 1 21:35:44 EST 2016
from __future__ import division
import ast
from sympy import *
x, y, z, t = symbols('x y z t')
k, m, n = symbols('k m n', integer=True)
f, g, h = symbols('f g h', cls=Function)
import inspect
def op2(a,b):
return a*b+a
class AA(object):
@staticmethod
def __additionFunction__(a1, a2):
return a1*a2 #Put what you want instead of this
def __multiplyFunction__(a1, a2):
return a1*a2+a1 #Put what you want instead of this
def __divideFunction__(a1, a2):
return a1*a1*a2 #Put what you want instead of this
def __init__(self, value):
self.value = value
def __add__(self, other):
return self.value*other.value
def __mul__(self, other):
return self.value*other.value + other.value
def __div__(self, other):
return self.value*other.value*other.value
solve([AA(x)*AA(y) + AA(-1), AA(x) + AA(-2)], x, y)
>>> class AA(object):
... @staticmethod
... def __additionFunction__(a1, a2):
... return a1*a2 #Put what you want instead of this
... def __multiplyFunction__(a1, a2):
... return a1*a2+a1 #Put what you want instead of this
... def __divideFunction__(a1, a2):
... return a1*a1*a2 #Put what you want instead of this
... def __init__(self, value):
... self.value = value
... def __add__(self, other):
... return self.value*other.value
... def __mul__(self, other):
... return self.value*other.value + other.value
... def __div__(self, other):
... return self.value*other.value*other.value
...
>>> solve([AA(x)*AA(y) + AA(-1), AA(x) + AA(-2)], x, y)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'Add' and 'AA'
On Thursday, December 1, 2016 at 7:19:58 PM UTC+8, Steve D'Aprano wrote:
> On Thu, 1 Dec 2016 05:26 pm, Ho Yeung Lee wrote:
>
> > import ast
> > from __future__ import division
>
> That's not actually your code. That will be a SyntaxError.
>
> Except in the interactive interpreter, "__future__" imports must be the very
> first line of code.
>
>
> > class A:
> > @staticmethod
> > def __additionFunction__(a1, a2):
> > return a1*a2 #Put what you want instead of this
>
> That cannot work in Python 2, because you are using a "classic"
> or "old-style" class. For staticmethod to work correctly, you need to
> inherit from object:
>
> class A(object):
> ...
>
>
> Also, do not use double-underscore names for your own functions or methods.
> __NAME__ (two leading and two trailing underscores) are reserved for
> Python's internal use. You should not invent your own.
>
> Why do you need this "additionFunction" method for? Why not put this in the
> __add__ method?
>
> > def __add__(self, other):
> > return self.__class__.__additionFunction__(self.value, other.value)
> > def __mul__(self, other):
> > return self.__class__.__multiplyFunction__(self.value, other.value)
>
> They should be:
>
> def __add__(self, other):
> return self.additionFunction(self.value, other.value)
>
> def __mul__(self, other):
> return self.multiplyFunction(self.value, other.value)
>
> Or better:
>
> def __add__(self, other):
> return self.value + other.value
>
> def __mul__(self, other):
> return self.value * other.value
>
>
>
> --
> Steve
> “Cheer up,” they said, “things could be worse.” So I cheered up, and sure
> enough, things got worse.
More information about the Python-list
mailing list