如何读取函数的多种形式的属性?

How to read multiple forms of attributes of function?

我需要为我的多项式函数加载属性,但它以不同的形式加载。

在作业中,我有 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

但这不是第三种情况,不适用于第一种和第二种情况。

使用

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"]]

为了按照指定定义您的 class 构造函数,您需要它能够在给定 args 时在列表和多个元素之间排序,或者在给出 **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/

现在您可以修改它,以便考虑多度、缺少关键字、输入错误等... 有时,输入检查和清理可能非常复杂,因此需要一个完整的其他方法定义。