Как прочитать несколько форм атрибутов функции? - PullRequest
0 голосов
/ 01 апреля 2019

Мне нужно загрузить атрибуты для моей полиномиальной функции, но она загружается в другой форме.

В задании у меня есть 3 значения форм, и я не знаю, как прочитать их все.Один из них вводится как list (), следующий - как элементы, а последний вводится числом степеней полинома (для меня это самая большая проблема).

p1 = Polynomial([1,-3,0,2])
p2 = Polynomial(1,-3,0,2)
p3 = Polynomial(x0=1,x3=2,x1=-3)
>>> print(*p*)
2x^3 - 3x + 1

Я уже пробовалчто-то вроде:

class Polynomial(object):
    def __init__(self,*X):
        self.x = X
    def __str__(self):
        index = 0
        while True:
            element = element+self.x[index]+"x^"+index

, но это не ожидало третьего случая и не работает с первым и вторым.

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Чтобы определить ваш конструктор класса, как указано, вам нужно иметь возможность сортировки между списком и несколькими элементами, когда заданы аргументы, или несколькими ключевыми аргументами, когда задано ** kwargs.

Предполагается, что пользовательне портит ввод, это будет рабочий пример:

class Polynomial:
    """
    Assuming max. degree is always 3
    """
    def __init__(self, *args, **kwargs):
        if args:
            if len(args) == 1:  # here user gave a list
                self.x0 = args[0][0]
                self.x1 = args[0][1]
                self.x2 = args[0][2]
                self.x3 = args[0][3]
            elif len(args) == 4:  # here we have the four coefficients
                self.x0 = args[0]
                self.x1 = args[1]
                self.x2 = args[2]
                self.x3 = args[3]
        elif kwargs: # if args are not present, we check if keywords arguments are
            self.x0 = kwargs['x0']
            self.x1 = kwargs['x1']
            self.x2 = kwargs['x2']
            self.x3 = kwargs['x3']

Вот учебник по обработке аргументов: https://pythontips.com/2013/08/04/args-and-kwargs-in-python-explained/

Теперь вы можете изменить его, чтобы принять во вниманиемножественная степень, отсутствующие ключевые слова, ошибки ввода и т. д. Иногда проверка и очистка ввода могут быть достаточно сложными, так что требуется совсем другое определение метода.

0 голосов
/ 01 апреля 2019

Использование

def __init__(self, *args, **kwargs):
    self.args = args
    self.kwargs = kwargs

В первом случае args будет содержать [[1,-3,0,2]] (поэтому вы хотите манипулировать args[0])

Во втором случае args будет содержать [1,-3,0,2]

И в последнем случае kwargs будет содержать { x0: 1, x3: 2, x1: -3 }

В последнем случае, чтобы перевести kwargs в нужный вам список (IE [1,-3,0,2]), вы можете сделать

[kwargs.get("x0", 0), kwargs.get("x1", 0), kwargs.get("x2", 0), kwargs.get("x3", 0)]

Это даст вам список значений kwargs, которые вы хотите при правильных клавишах, или 0, если не найдены. (хороший способ: [kwargs.get(x, 0) for x in ["x0","x1","x2","x3"]])

...