类方法:'自'不被读

时间:2013-08-11 15:24:18

标签: python

出于某种原因,在我制作的方法中,我将self作为第一个参数,但它不会读取它。当我尝试运行该方法时,它说它需要“自我”位置参数。

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

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

Monster.decreaseHealth()

3 个答案:

答案 0 :(得分:2)

问题是你在类本身上调用decreaseHealth(),而你应该在类的实例上调用它:

m = Monster()
m.decreaseHealth()

这会自动将self绑定到m

P.S。要在方法中引用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()

答案 1 :(得分:0)

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

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

monster = Monster();
monster.decreaseHealth()

答案 2 :(得分:0)

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

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