2024-10-01 22:39:44 发布
网友
出于某种原因,在我创建的方法中,我将self作为第一个参数,但它不读取它。当我尝试运行这个方法时,它说它需要“self”位置参数。你知道吗
class Monster(): name = "Snake" health = 100 def decreaseHealth(self): if health <= 0: print('Dead') health -= 4 Monster.decreaseHealth()
这是因为您调用decreaseHealth()的方式没有自变量。self指调用方法的对象。这里没有对象,您正在尝试调用类名上的方法。你知道吗
你需要创建一个怪物对象,然后调用你的方法:
monster = Monster(); monster.decreaseHealth()
如果您想要一个类方法,最好是这样:
@classmethod def decreaseHealth(cls): ...
然后可以调用Monster.decreaseHealth,并且可以使用cls.(例如cls.health)访问类变量。但是,然后,您将在与类本身相关联的“全局”状态上进行操作。你知道吗
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(),而应该在类的实例上调用它:
decreaseHealth()
m = Monster() m.decreaseHealth()
这将自动将self绑定到m。你知道吗
self
m
注意:要在方法中引用health,请使用self.health。你知道吗
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()
这是因为您调用decreaseHealth()的方式没有自变量。self指调用方法的对象。这里没有对象,您正在尝试调用类名上的方法。你知道吗
你需要创建一个怪物对象,然后调用你的方法:
如果您想要一个类方法,最好是这样:
然后可以调用
Monster.decreaseHealth
,并且可以使用cls.
(例如cls.health
)访问类变量。但是,然后,您将在与类本身相关联的“全局”状态上进行操作。你知道吗你可能想为你的怪物做一个实例:
问题是您在类本身上调用
decreaseHealth()
,而应该在类的实例上调用它:这将自动将
self
绑定到m
。你知道吗注意:要在方法中引用
health
,请使用self.health
。你知道吗以下是一个版本,修复了几个其他(主要是风格)问题:
相关问题 更多 >
编程相关推荐