'__neg__'实现。我正在用python学习魔术方法

时间:2018-08-25 23:33:31

标签: python python-2.7 magic-methods

这是一个多项式类

class Polynomial(object):

def __init__(self, polynomial):
    self.p = tuple(polynomial)

def get_polynomial(self):
    return self.p

def __neg__(self):
    return tuple([tuple([-i[j] if j==0 else i[j] for j in range(len(i))])for i in self.p])

def __add__(self, other):
    pass

def __sub__(self, other):
    pass

def __mul__(self, other):
    pass

def __call__(self, x):
    pass

def simplify(self):
    pass

def __str__(self):
    return 'something'

如果我使用下面的代码,则出现-p语法错误的错误。有其他方法可以替代魔术方法吗?

p = Polynomial([(2, 1), (1, 0)])
print p
print p.get_polynomial()
q = ‑p; q.get_polynomial()

我在q = -p

时遇到语法错误

1 个答案:

答案 0 :(得分:3)

问题在于您的__neg__方法返回的是tuple,而不是Polynomial类的实例。

因此,当您尝试调用get_polynomial时,它将在tuple上发生,从而导致错误,指出tuple没有名为get_polynomial的方法。

  

AttributeError:“元组”对象没有属性“ get_polynomial”

因此,您的__neg__方法必须返回您的Polynomial类的实例,如下所示:

def __neg__(self):
    return Polynomial([tuple([-i[j] if j == 0 else i[j] for j in range(len(i))]) for i in self.p])