我得到了以下python代码,当单击一个按钮时调用printSaved
(使用wx库和python 2.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和HOW / WHY?这与活动有关吗?
答案 0 :(得分:3)
在Python中,调用方法的对象总是作为参数显式传递。此参数通常称为self
。
readSaved()
作为实例方法的正确定义应将此作为第一行:
def readSaved(self):
# ...
如果您希望它是模块级函数,您应该按如下方式调用它:
s = readSaved()
答案 1 :(得分:2)
答案 2 :(得分:1)
是否在课程中定义?我想它确实如此,因为第二种方法需要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 l
答案 3 :(得分:0)
因为它是一种方法 - 你将它称为方法,无论如何 - 你必须至少有self
作为参数。当函数作为方法调用时,调用方法的对象将作为该函数的第一个参数传递。