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

AltStyle によって変換されたページ (->オリジナル) /