6

我试图简单地使用带有返回值的简单函数从我的类中获取值,我确信这是一个微不足道的错误,但我对 python 很陌生

我有一个简单的类设置如下:

class score():
#initialize the score info 
    def __init__(self):
        self.score = 0
        self.num_enemies = 5
        self.num_lives = 3

    # Score Info
    def setScore(num):
        self.score = num

    # Enemy Info
    def getEnemies():
        return self.num_enemies

    # Lives Info
    def getLives():
        return self.getLives

etc.....

比我这样创建类的实例:

scoreObj = score()

for enemies in range(0, scoreObj.getEnemies):
    enemy_sprite.add(enemy())  

我收到错误消息说需要一个整数,但它有一个实例方法

获取此信息的正确方法是什么?

谢谢!

4

5 回答 5

6

scoreObj.getEnemies是对方法的引用。如果你想调用它,你需要括号:scoreObj.getEnemies().

您应该考虑为什么要为此使用方法,而不是self.num_enemies直接阅读。在 Python 中不需要像这样的琐碎的 getter/setter 方法。

于 2013-02-08T08:09:06.630 回答
4

python中成员函数的第一个参数是对Object的引用。

传统上您称其为“self”,但无论您如何称呼第一个参数,它都指回“self”对象:

每当我收到关于 python 中参数类型的奇怪错误时,我都会检查是否忘记了 self 参数。被这个bug咬过几次。

class score():
#initialize the score info 
    def __init__(self):
        self.score = 0
        self.num_enemies = 5
        self.num_lives = 3

    # Score Info
    def setScore(self, num):
        self.score = num

    # Enemy Info
    def getEnemies(self):
        return self.num_enemies

    # Lives Info
    def getLives(foo): #foo is still the same object as self!!
        return foo.num_lives
        #Works but don't do this because it is confusing
于 2013-02-08T08:09:50.660 回答
3

此代码有效:

class score():
    def __init__(self):
        self.score = 0
        self.num_enemies = 5
        self.num_lives = 3

    def setScore(self, num):
        self.score = num

    def getEnemies(self):
        return self.num_enemies

    def getLives(self):
        return self.getLives

scoreObj = score()

for enemy_num in range(0, scoreObj.getEnemies()):
    print enemy_num
    # I don't know what enemy_sprite is, but
    # I commented it out and just print the enemy_num result.
    # enemy_sprite.add(enemy())

学过的知识:

类函数必须始终采用一个参数,self。那是因为当你在类中调用一个函数时,总是以类名作为调用对象来调用它,比如:

scoreObj = score()
scoreObj.getEnemies()

类对象在哪里x,它将getEnemies()作为根对象传递给,意思是发送给类的第一个参数。

其次,当调用类中的函数(或根本调用)时,总是以 结尾,()因为这是在 Python 中调用某些东西的定义。

然后,问问自己,“为什么我没有像这样获取'scoreObj.num_lives'?我是否节省了处理能力?” 按照你的选择去做,但如果你直接从类对象中获取值会更快,除非你想同时计算东西。那么你的逻辑就很合理了!

于 2013-02-08T08:28:01.297 回答
1

getEnemies是一个函数,所以像任何其他函数一样调用它scoreObj.getEnemies()

于 2013-02-08T08:08:06.130 回答
1

你犯了一个简单的错误:

scoreObj.getEnemies()
于 2013-02-08T08:08:30.173 回答