基本Python类产生TypeError
我对Python相当陌生。在这里,我创建了一个类来表示类似blob的结构。但是,我的代码会产生以下错误: TypeError:add()接受3个位置参数,但给出了4个 我在这里做错了什么?当我提供3个输入时,我如何提供4个输入基本Python类产生TypeError,python,class,Python,Class,我对Python相当陌生。在这里,我创建了一个类来表示类似blob的结构。但是,我的代码会产生以下错误: TypeError:add()接受3个位置参数,但给出了4个 我在这里做错了什么?当我提供3个输入时,我如何提供4个输入 注意:错误源于“test1.add(0,0,12)”行。您的实例方法缺少self引用: def computeCorrelation(self, newCorrel) # ^ def add(self, x, y, newCo
注意:错误源于“test1.add(0,0,12)”行。您的实例方法缺少
self
引用:
def computeCorrelation(self, newCorrel)
# ^
def add(self, x, y, newCorrel)
# ^
实例方法传递的第一个参数是对该类实例的引用。因此,您的add
方法应该有4个参数,但是当从类的实例调用该方法时,只需要传递3个参数。Python为您传递对该实例的引用
更重要的是,您将类本身的属性引用为
Blob。对于某些属性
,您应该使用self
:
def __init__(self):
self.mass = 0
self.correlationVal = 0
这只会修改类实例上的那些属性,而这正是您使用
\uuuu init\uuuu
所希望的。这同样适用于其他方法。在类中,函数的第一个参数是self
。在main中,调用test1.add(0,0,12)
,python调用test1.add(test1,0,0,12)
,所以现在他有4个参数
class Blob:
mass = 0
xvals = []
yvals = []
correlationVal = 0
def __init__(self):
self.mass = 0
self.correlationVal = 0
def add(self,x, y, newCorrel):
self.correlationVal = computeCorrelation(self,newCorrel)
self.mass += 1
self.xvals.append(x)
self.yvals.append(y)
Python类方法的第一个参数必须是
self
,即defadd(self,x,y,newCorrel):
而不是defadd(x,y,newCorrel):
Self在调用类实例方法时隐式地传递给类实例方法,因此,为什么要传递4个参数,而不仅仅是显式传递的3个参数
注意:非实例方法(静态方法)不要求self作为其第一个参数。有关更多详细信息,请参阅。您的方法应接受self作为第一个参数。。ie def add(self、x、y、newCorrel):可能的重复项您应该花一些时间阅读-您可能需要多次重新访问它:9.1)名称和对象以及9.2)范围和名称空间小节对于理解非常重要。如果某个属性打算作为实例属性,则
self
通常用于实例的名称,并且它始终是传递给实例方法的第一个参数。此外,这些方法应该引用实例self
,而不是类Blob
。\uuuu init\uuuu(self)
的第一行将如下所示:self.mass=0
我明白了。谢谢大家的反馈<代码>自我只是一个惯例,顺便说一句,但这是一个很好的惯例!我们留着吧
class Blob:
mass = 0
xvals = []
yvals = []
correlationVal = 0
def __init__(self):
self.mass = 0
self.correlationVal = 0
def add(self,x, y, newCorrel):
self.correlationVal = computeCorrelation(self,newCorrel)
self.mass += 1
self.xvals.append(x)
self.yvals.append(y)