类方法:未读取“self”

2024-04-25 02:07:19 发布

您现在位置:Python中文网/ 问答频道 /正文

出于某种原因,在我创建的方法中,我将self作为第一个参数,但它不读取它。当我尝试运行这个方法时,它说它需要“self”位置参数。你知道吗

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

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

Monster.decreaseHealth()

Tags: 方法nameself参数ifdefclassprint
3条回答

这是因为您调用decreaseHealth()的方式没有自变量。self指调用方法的对象。这里没有对象,您正在尝试调用类名上的方法。你知道吗

你需要创建一个怪物对象,然后调用你的方法:

monster = Monster();
monster.decreaseHealth()

如果您想要一个类方法,最好是这样:

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

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

m = Monster()
m.decreaseHealth()

这将自动将self绑定到m。你知道吗

注意:要在方法中引用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()

相关问题 更多 >