list()最多需要1个参数(给定3个)

时间:2015-05-06 07:35:54

标签: python

我想得到像v:[1.0, 2.0, 3.0]

这样的矢量

这是我的代码:

class VECTOR(list) :
     def _init_ (self,x=0.0,y=0.0,z=0.0,vec=[]) :
          list._init_(self,[float(x),float(y),float(z)])
          if vec :
               for i in [0,1,2] :
                    self[i] = vec[i]

但是当我输入时:a = VECTOR(1,2,3) 它出了问题:

  

TypeError:list()最多需要1个参数(给定3个)

我该如何解散它?

2 个答案:

答案 0 :(得分:23)

问题是你拼错了构造函数的名字。将_init_替换为__init__

这是固定代码:

class VECTOR(list) :
     def __init__ (self,x=0.0,y=0.0,z=0.0,vec=[]) :
          list.__init__(self,[float(x),float(y),float(z)])
          if vec :
               for i in [0,1,2] :
                    self[i] = vec[i]

a = VECTOR(1,2,3)
print(a)

并证明它有效:

 % python test.py
[1.0, 2.0, 3.0]

我还想再给你一些评论:

  • 你应该根据PEP8修改编码风格(这是每个Python开发人员应该完全阅读的文档);
  • 你可以做更多Pythonic(感谢Benjamin);
  • 继承不是唯一的方法,你也可以使用一个属性来存储列表并定义相关的方法(感谢Veedrac);
  • 你也可以使用super(参见paddyg的回答);

编辑说明:我已在此解决方案中添加了评论中的相关建议。

答案 1 :(得分:-2)

EDIT 如果您使用super(VECTOR, list).__init__()致电,则无需通过自我。 你还需要传递1,2,3作为列表[1,2,3]