我正在做一个游戏,我想做的一件事就是有一个基类来定义一个属性损害,并使用一个构造函数来初始化这个值。这是我的基类
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)
我以前也用过类,但我对创建基类和构造函数以及调用其他类都是新手。如果有人能帮我理解我的问题,我会非常感激的。在
当您为类的
__init__
方法指定一个位置参数时,这意味着每次实例化类时都要提交参数。因为您已经将is_loaded
和reloads
声明为Crossbow
类的__init__
方法的位置参数,所以在实例化时必须提供它们。在测试代码中,提供了类Weapon
作为__init__
调用的第一个位置参数is_loaded
的值。当然,这是错误的,但不是语法错误。您根本没有为reloads
提供任何参数,这是一个语法错误。在您可能希望为未提供的参数设置默认值,例如:
如果您这样做,您可以在不显式设置值的情况下实例化。在
也可以将默认值设置为“无”,并且仅在非“无”值上重写类的值:
^{pr2}$使用}创建Crossbow的实例。(另外,超类构造函数调用缺少
c = Crossbow(initial_load_state, initial_reloads)
,而不是{damage
参数。)相关问题 更多 >
编程相关推荐