'__neg__' реализация. я изучаю магические методы в питоне - PullRequest
0 голосов
/ 26 августа 2018

это полиномиальный класс

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 голосов
/ 26 августа 2018

Проблема в том, что ваш метод __neg__ возвращает tuple вместо экземпляра вашего Polynomial класса.

Таким образом, когда вы пытаетесь вызвать get_polynomial, это произойдет на tuple, что приводит к ошибке, утверждающей, что tuple не имеет метода с именем get_polynomial.

AttributeError: у объекта 'tuple' нет атрибута '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])
...