Python - 根据参数帮助定义具有可变数量属性的类

时间:2016-03-02 23:26:04

标签: python python-2.7

定义一个Python类Polynomial,它提供了执行的方法 多项式的代数运算。你的班级应该按照描述行事 在以下示例脚本中:

>>> p1 = Polynomial([1, 2, 3])
>>> p1
1.000 z**2 + 2.000 z + 3.000
>>> p2 = Polynomial([100, 200])
>>> p1.add(p2)
1.000 z**2 + 102.000 z + 203.000
>>> p1 + p2
1.000 z**2 + 102.000 z + 203.000
>>> p1(1)
6.0
>>> p1(-1)
2.0
>>> (p1 + p2)(10)
1323.0
>>> p1.mul(p1)
1.000 z**4 + 4.000 z**3 + 10.000 z**2 + 12.000 z + 9.000
>>> p1 * p1
1.000 z**4 + 4.000 z**3 + 10.000 z**2 + 12.000 z + 9.000
>>> p1 * p2 + p1
100.000 z**3 + 401.000 z**2 + 702.000 z + 603.000
>>> p1.roots()
[(-1+1.4142135623730947j), (-1-1.4142135623730947j)]
>>> p2.roots()
[-2.0]
>>> p3 = Polynomial([3, 2, -1])
>>> p3.roots()
[-1.0, 0.33333333333333331]
>>> (p1 * p1).roots()
Order too high to solve for roots.

您将如何设计此功能,以便它可以采用不同等级的多项式。我真的迷路了。

感谢。

1 个答案:

答案 0 :(得分:1)

您可以创建一个具有可变数量属性的类:

class Var:
    def __init__(self,**kwargs):
        for attr in kwargs.keys():
            self.__dict__[attr] = kwargs[attr]




v = Var(name="Sam",age=22)
print(v.__dict__)
print(v.name)
print(v.age)

输出:

{'age': 22, 'name': 'Sam'}
Sam
22

但是如果你想将列表作为参数传递并将列表的每个成员分配给类中的一个属性,其名称将是一个字母,在每个属性中升序,你可以执行以下操作:

class Var:
    def __init__(self,*args):
        keyVal = 97
        for attr in args:
            self.__dict__[chr(keyVal)] = attr
            keyVal+=1




v1 = Var(1,2,3)
print('Attributes of v1',v1.__dict__)
myList = [4,5]
v2 = Var(*myList)
print("attributes of v2",v2.__dict__)

输出:

('Attributes of v1', {'a': 1, 'c': 3, 'b': 2})
('attributes of v2', {'a': 4, 'b': 5})