首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >奇怪的额外参数

奇怪的额外参数
EN

Stack Overflow用户
提问于 2012-03-13 21:43:47
回答 4查看 76关注 0票数 1

我获得了以下python代码,其中在单击按钮时调用printSaved (使用wx库和Python2.7.2)。但是当这种情况发生时,我得到了一个非常奇怪的错误

代码语言:javascript
复制
Traceback (most recent call last):
  File "./program.py", line 135, in printSaved
    s = self.readSaved()
TypeError: readSaved() takes no arguments (1 given)

以下是代码

代码语言:javascript
复制
  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的,是如何/为什么传递的?这和这件事有关系吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-13 21:46:36

在Python中,调用方法的对象总是显式地作为参数传入。这个参数通常被称为self

readSaved()定义为实例方法的正确定义应将以下内容作为第一行:

代码语言:javascript
复制
def readSaved(self):
    # ...

如果您希望它是模块级函数,则应按如下方式调用它:

代码语言:javascript
复制
s = readSaved()
票数 3
EN

Stack Overflow用户

发布于 2012-03-13 21:46:14

Methods are passed the instance as the first argument.

票数 2
EN

Stack Overflow用户

发布于 2012-03-13 21:46:50

它是在类中定义的吗?我想是这样的,因为第二个方法使用self

如果readSaved是一个实例方法,它也将self作为第一个参数。如果您不需要它,请使用@staticmethod装饰器:

代码语言:javascript
复制
@staticmethod
def readSaved():
  f = codecs.open((os.getenv('HOME') +'/Dokument/savefile.txt') ,'r','utf-8')
  l = f.readlines()
  f.close()
  return l
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9685195

复制
相关文章

相似问题

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