首页 > 解决方案 > '__neg__' 实现。我正在学习python中的魔术方法

问题描述

这是一个多项式类

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 处遇到语法错误

标签: pythonpython-2.7magic-methods

解决方案


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

因此,当您尝试调用get_polynomial它时,它将发生在 a 上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])

推荐阅读