2016-03-02 64 views
0

定义一个Python类Polynomial,该类提供了对多项式执行 代数运算的方法。在下面的示例转录物 你的类应该表现:Python - 根据参数定义具有可变数量属性的类

>>> 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. 

你怎么会去设计这个功能,所以它可以采取不同等级的多项式。我真的迷失了。

谢谢。

+3

为什么您需要可变数量的属性?使用包含列表的单个属性。 – Barmar

+0

那我该如何去打印呢? –

+0

http://stackoverflow.com/questions/1535327/python-how-to-print-a-class-or-objects-of-class-using-print – Barmar

回答

1

您可以创建属性的变量数A类:

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}) 
+0

对不起,我不知道什么__dict__或kwargs意思是 –

+0

@AndrésRivero:kwargs的意思是关键字参数,形式为name =“Sam”,年龄= 22。这些kwargs可以像字典一样在函数内部访问,在这种情况下字典是kwargs。 python字典的简单解释在这里给出:http://www.tutorialspoint.com/python/python_dictionary.htm – YBathia

+0

好的。但是如果我想通过一个列表作为参数呢?并将该列表的每个成员分配给该类中的一个属性,该属性的名称将成为一个字母,在每个属性中升序,如:self.a = 3','self.b = 4'等。 –

相关问题