在类中调用基方法

2024-03-28 22:12:17 发布

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

我正在做一个游戏,我想做的一件事就是有一个基类来定义一个属性损害,并使用一个构造函数来初始化这个值。这是我的基类

class Weapon(object):
def __init__(self, damage):
    self.damage = damage

这是为游戏调用武器的实际类

^{pr2}$

我用以下方法测试重新加载功能:

c = Crossbow(Weapon)
for i in range(1,6):
    c.reload()

我运行类方法6次的原因是,我想测试reload变量,它计算重新加载的次数。它每次计数都会减去一次,一旦达到零,就不允许重新加载,所以6次就可以测试全部功能。但是,当我运行这段代码时,我得到了一个错误:

me.py", line 47, in <module>
c = Crossbow(Weapon)
TypeError: __init__() takes exactly 3 arguments (2 given)

我以前也用过类,但我对创建基类和构造函数以及调用其他类都是新手。如果有人能帮我理解我的问题,我会非常感激的。在


Tags: 方法inself功能游戏属性定义object
2条回答

当您为类的__init__方法指定一个位置参数时,这意味着每次实例化类时都要提交参数。因为您已经将is_loadedreloads声明为Crossbow类的__init__方法的位置参数,所以在实例化时必须提供它们。在测试代码中,提供了类Weapon作为__init__调用的第一个位置参数is_loaded的值。当然,这是错误的,但不是语法错误。您根本没有为reloads提供任何参数,这是一个语法错误。在

您可能希望为未提供的参数设置默认值,例如:

def __init__(self, is_loaded=True, reloads=5):
    super(Crossbow, self).__init__(damage=5) # or whatever for damage

如果您这样做,您可以在不显式设置值的情况下实例化。在

也可以将默认值设置为“无”,并且仅在非“无”值上重写类的值:

^{pr2}$

使用c = Crossbow(initial_load_state, initial_reloads),而不是{}创建Crossbow的实例。(另外,超类构造函数调用缺少damage参数。)

相关问题 更多 >