-2

出于某种原因,在我制作的方法中,我将 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()

这将自动绑定selfm.

PS 要参考health方法内部,请使用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

如果你想要一个类方法,最好让它成为一个:

@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

那是因为您调用reduceHealth()的方式没有self参数。self指的是调用方法的对象。在这里你没有对象,你试图调用类名上的方法。

您需要创建一个 Monster 对象,然后调用您的方法:

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