出于某种原因,在我制作的方法中,我将 self 作为第一个参数,但它不读取它。当我尝试运行该方法时,它说它需要“自我”位置参数。
class Monster():
name = "Snake"
health = 100
def decreaseHealth(self):
if health <= 0:
print('Dead')
health -= 4
Monster.decreaseHealth()
出于某种原因,在我制作的方法中,我将 self 作为第一个参数,但它不读取它。当我尝试运行该方法时,它说它需要“自我”位置参数。
class Monster():
name = "Snake"
health = 100
def decreaseHealth(self):
if health <= 0:
print('Dead')
health -= 4
Monster.decreaseHealth()
问题是您正在调用decreaseHealth()
类本身,而您应该在类的实例上调用它:
m = Monster()
m.decreaseHealth()
这将自动绑定self
到m
.
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()
如果你想要一个类方法,最好让它成为一个:
@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()
那是因为您调用reduceHealth()的方式没有self参数。self指的是调用方法的对象。在这里你没有对象,你试图调用类名上的方法。
您需要创建一个 Monster 对象,然后调用您的方法:
monster = Monster();
monster.decreaseHealth()