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())  

整数が必要であるというエラーが表示されますが、instancemethodが取得されました

この情報を取得する正しい方法は何ですか?

ありがとう!

4

5 に答える 5

6

scoreObj.getEnemiesメソッドへの参照です。それを呼び出したい場合は、括弧が必要ですscoreObj.getEnemies()

直接読むのではなく、なぜこのための方法を使用しているのかを考える必要がありますself.num_enemies。Pythonでは、このような簡単なゲッター/セッターメソッドは必要ありません。

于 2013-02-08T08:09:06.630 に答える
4

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(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())

学んだ教訓:

クラス関数は常に1つのパラメーターをとる必要があります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 に答える