为什么我传入对象时没有意图,但实际上却传递了参数?

3
我正在学习Python 2.7,并编写一个文本冒险游戏(类似于Zork)来进行练习。我决定尝试以模块化的方式编写它,因为会有很多函数可以分离成不同的文件以便于组织和清晰度。
在Windows 7上使用Visual Studio 2015,我创建了一个包含3个文件的解决方案:MainGame.py、Session.py和Verbs.py。
  • MainGame.py是运行游戏的主要Python文件。
  • Session.py是一个类文件,其实例存储玩家信息。
  • Verbs.py用于分析玩家输入的函数。
这里显示的只是为了测试是否可以将对象传递给需要分析玩家数据的函数。

Main.py

from Session import Session
from verbs import showX

s = Session()

showX(s)

Session.py

class Session(object):
    def __init__(self):
        x = 5

    def getX():
        return x

Verbs.py

def showX(s):
    print s.getX()

当我运行这个时,出现以下错误:
TypeError was unhandled by user code

getX() takes no arguments (1 given)

在showX内调用getX方法时,我期望不需要传递任何参数,但实际上却传递了参数。我的问题是:我传递了什么?这种情况有什么问题?
1个回答

5

类方法在调用时始终会在开头添加一个额外的参数,以表示调用该方法的对象。这就是为什么它们应该始终在开头有一个 self 参数的原因。

您可能希望 Session.py 看起来像这样:

class Session(object):
    def __init__(self):
        self.x = 5

    def getX(self):
        return self.x

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接