从Python中的类中的函数获取返回值

时间:2013-02-08 08:04:56

标签: python

我试图通过一个带有返回值的简单函数简单地从我的类中获取值,我确定它是一个微不足道的错误,但我对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())  

我得到的错误是说预期有一个整数,但是它有一个instancemethod

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

谢谢!

5 个答案:

答案 0 :(得分:5)

scoreObj.getEnemies是对该方法的引用。如果你想打电话,你需要括号:scoreObj.getEnemies()

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

答案 1 :(得分:3)

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

传统上你称之为“自我”,但不管你称之为第一个参数,它都会引用“自我”对象:

每当我在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(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

答案 2 :(得分: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'而是这样呢?我是否节省了处理能力?”按你的选择做,但如果你这样做会更快直接从类对象获取值,除非您想同时计算内容。那你的逻辑很有道理!

答案 3 :(得分:1)

getEnemies是一个函数,因此像任何其他函数scoreObj.getEnemies()

一样调用它

答案 4 :(得分:1)

你犯了一个简单的错误:

scoreObj.getEnemies()