首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -- Classes -- TypeError

Python -- Classes -- TypeError
EN

Stack Overflow用户
提问于 2013-12-03 10:41:01
回答 2查看 1K关注 0票数 0

我正在编写一个程序,它将对向量做一些事情。现在我可以打印出一个向量,但如果需要的话,我希望能够使用我的add函数添加到向量中。然而,它似乎不起作用。它说它只能接受一个参数,但即使我只输入了一个参数,也给出了两个参数。有什么建议吗?

class Vec:

代码语言:javascript
复制
def __init__(self, length = 0):
    self.vector = [0]*length

def __str__(self):
    return '[{}]'.format(', '.join(str(i) for i in self.vector))

def __len__(self):
    return len(self.vector)

def extd(self, newLen):
    self.vector.append([0]*newLen)
    return (', '.join(str(j) for j in self.vector))
EN

回答 2

Stack Overflow用户

发布于 2013-12-03 10:44:23

您需要将self作为您的第一个参数进行传递。

代码语言:javascript
复制
def add(self, newLen):

否则,传递的不是newLen,而是指向实例本身的指针,因此会出现错误。

通过添加self,自动传递的第一个参数是实例,第二个参数是newLen

请参阅此控制台会话,例如:

代码语言:javascript
复制
>>> class A:
    def pass_parameters(first_param, second_param=None):
        print(first_param, second_param)


>>> a = A()
>>> a.pass_parameters()
<__main__.A object at 0x000000000322BBE0> None
>>> a.pass_parameters('parameter')
<__main__.A object at 0x000000000322BBE0> parameter

希望这能有所帮助!

票数 3
EN

Stack Overflow用户

发布于 2013-12-03 10:43:57

您的add方法缺少self参数。它应该看起来像这样:

代码语言:javascript
复制
def add(self, newLen):
    self.vector.append(newLen)
    return '[{}]'.format(', '.join(str(i) for i in self.vector))

在Python中,当您调用实例方法时,会自动将实例作为第一个参数(通常命名为self)传递给您。

示例:

代码语言:javascript
复制
v = Vec()
v.add(4)   # Essentially calls Vec.add(v, 4)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20341858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档