Python Полиномы класса не будут работать, как я ожидаю, что это будет работать - PullRequest
0 голосов
/ 21 февраля 2020

Для упражнения мы должны создать класс Polynomials, в котором хранятся коэффициенты полинома одной переменной (1-мерного), реализующие функцию печати, умножение, суммирование и вычитание двух полиномов, вычисление в одной точке в качестве функтора и два метода, реализующие производную и интеграл полинома (константы интегрирования установлены в ноль).

Я попытался создать полином класса, где я могу создать полином с n коэффициентами, и реализовал методы.

Когда я не использую дополнительный класс и не создаю полиномы, такие как p1 = np.poly1d([...]), код работает нормально. Но как только я создаю класс Polynomials и использую свою функцию __init__, код выдает несколько ошибок при вызове других методов.

Будь то ошибки Key или Polynomials object has no attribute '_variable'

Мой код:

import numpy as np

class Polynomials (np.poly1d):
    def __init__(self, coefficients):
        self.name = np.poly1d(coefficients)

    def Coefficients(self):
        return self.c

    def evaluation(self, x):
        return self(x)

    def mul(self, a):
        return np.polymul(self, a)

    def sum(self, a):
        return np.polyadd(self, a)

    def subtraction(self, a):
        return np.polysub(self, a)

    def __str__(self):
        return str(self.name)

def differentiate(self):
    return np.polyder(self)

def integrate(self):
    return np.polyint(self)


a= Polynomials([2,5,7,8])
b = Polynomials([3,5,7,1])
print (a)
print(b)
#print(a(10))
c = a.mul(b)
#print(c)

Код ошибки выглядит следующим образом:

line 14, in mul
    return np.polymul(self, a)
  File "<__array_function__ internals>", line 6, in polymul
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/numpy/lib/polynomial.py", line 904, in polymul
    a1, a2 = poly1d(a1), poly1d(a2)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-               packages/numpy/lib/polynomial.py", line 1155, in __init__
    self._variable = c_or_r._variable
   AttributeError: 'Polynomials' object has no attribute '_variable'

Я уже пытался проверить, какой объект я действительно создаю с помощью print(isinstance(a, np.poly1d)), который показывает true, когда я создаю полином внутри нового класса И когда я создаю его без класса.

Итак, почему я могу выполнять все операции с созданным полиномом, когда я создаю его без класса и не могу выполнить его, когда я создать его в классе? Где я потерялся?

1 Ответ

0 голосов
/ 21 февраля 2020

Попробуйте:

class Polynomials (np.poly1d):
    def __init__(self, coefficients):
        super().__init__(coefficients)
        self.name = np.poly1d(coefficients)

    # ...

В противном случае вы никогда не запустите ни одну из poly1d процедур инициализации.

...