簡體   English   中英

從Python中的類中的函數獲取返回值

[英]Get the return value from a function in a class in 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())  

我得到的錯誤是預期整數,但它有一個實例方法

獲取此信息的正確方法是什么?

謝謝!

scoreObj.getEnemies是對該方法的引用。 如果你想調用它,你需要括號: scoreObj.getEnemies()

您應該考慮為什么使用這種方法而不是直接讀取self.num_enemies 在Python中不需要像這樣的普通getter / setter方法。

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

此代碼有效:

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'呢?我能節省處理能力嗎?” 按照您的選擇執行,但如果您直接從類對象獲取值,它會更快,除非您想同時計算內容。 然后你的邏輯很有意義!

getEnemies是一個函數,所以像任何其他函數scoreObj.getEnemies()一樣調用它

你犯了一個簡單的錯誤:

scoreObj.getEnemies()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM