-2

なんらかの理由で、私が作成したメソッドで、最初のパラメーターとして self を入れましたが、それが読み取られません。メソッドを実行しようとすると、'self' 位置引数が必要であると表示されます。

class Monster():
    name = "Snake"
    health = 100

    def decreaseHealth(self):
        if health <= 0:
            print('Dead')
        health -= 4

Monster.decreaseHealth()
4

3 に答える 3

2

問題は、クラスのインスタンスdecreaseHealth()で呼び出す必要があるのに対し、クラス自体で呼び出していることです。

m = Monster()
m.decreaseHealth()

これにより、 に自動的にバインドselfされmます。

PShealthメソッド内を参照するには、 を使用しますself.health

これは、他のいくつかの (主にスタイル上の) 問題を修正したバージョンです。

class Monster(object):

  def __init__(self):
     self.name = "Snake"
     self.health = 100

  def decreaseHealth(self):
     if self.health <= 0:
        print('Dead')
     else:
        self.health -= 4

m = Monster()
m.decreaseHealth()
于 2013-08-11T15:25:55.547 に答える
1

クラスメソッドが必要な場合は、1 つにすることをお勧めします。

@classmethod
def decreaseHealth(cls):
    ...

その後、 を呼び出すことができ、 (例: )Monster.decreaseHealthを使用してクラス変数にアクセスできます。ただし、クラス自体に関連付けられた「グローバル」状態で操作しています。cls.cls.health

おそらく、代わりにモンスターのインスタンスを作成したいと思うでしょう:

class Monster:
    ''' Base class for monsters '''

class Snake(Monster):
    def __init__(self):
        self.name = "Snake"
        self.health = 100
    def decreaseHealth(self):
        self.health -= 4
        if self.health <= 0:
            print("dead")

mysnake = Snake()
mysnake.decreaseHealth()
于 2013-08-11T15:27:21.490 に答える
0

これは、decreaseHealth()を呼び出す方法にself引数がないためです。selfは、メソッドが呼び出されたオブジェクトを参照します。ここにはオブジェクトがありません。クラス名でメソッドを呼び出そうとしています。

Monster オブジェクトを作成してから、メソッド呼び出す必要があります。

monster = Monster();
monster.decreaseHealth()
于 2013-08-11T15:26:36.340 に答える