出于某种原因,在我制作的方法中,我将self作为第一个参数,但它不会读取它。当我尝试运行该方法时,它说它需要“自我”位置参数。
class Monster():
name = "Snake"
health = 100
def decreaseHealth(self):
if health <= 0:
print('Dead')
health -= 4
Monster.decreaseHealth()
答案 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()