我获得了以下python代码,其中在单击按钮时调用printSaved (使用wx库和Python2.7.2)。但是当这种情况发生时,我得到了一个非常奇怪的错误
Traceback (most recent call last):
File "./program.py", line 135, in printSaved
s = self.readSaved()
TypeError: readSaved() takes no arguments (1 given)以下是代码
def readSaved():
f = codecs.open((os.getenv('HOME') +'/Dokument/savefile.txt') ,'r','utf-8')
l = f.readlines()
f.close()
return l
def printSaved(self,event):
s = self.readSaved()
for l in s:
print l我通过向readSaved(somethingUseless)添加一个参数修复了这个问题,一切都很正常。我的问题是什么是传递给readSaved的,是如何/为什么传递的?这和这件事有关系吗?
发布于 2012-03-13 21:46:36
在Python中,调用方法的对象总是显式地作为参数传入。这个参数通常被称为self。
将readSaved()定义为实例方法的正确定义应将以下内容作为第一行:
def readSaved(self):
# ...如果您希望它是模块级函数,则应按如下方式调用它:
s = readSaved()发布于 2012-03-13 21:46:14
Methods are passed the instance as the first argument.
发布于 2012-03-13 21:46:50
它是在类中定义的吗?我想是这样的,因为第二个方法使用self。
如果readSaved是一个实例方法,它也将self作为第一个参数。如果您不需要它,请使用@staticmethod装饰器:
@staticmethod
def readSaved():
f = codecs.open((os.getenv('HOME') +'/Dokument/savefile.txt') ,'r','utf-8')
l = f.readlines()
f.close()
return lhttps://stackoverflow.com/questions/9685195
复制相似问题