我遇到了我的super()。 init 方法的TypeError,说明它只需要一个位置参数,并且给出了三个。我假设Enchanted类继承了父类Weapons和Item中的其他参数,但我似乎错过了什么?
如果需要,使用python 3.5并链接到GitHub存储库:PythonRPG。
#base item class
class Item(object):
def __init__(self, name, description):
self.name = name
self.description = description
def __init__(self):
return "{}\n=====\n{}\nDamage: {}".format(self.name, self.description)
#start weapons
class Weapons(Item):
def __init__(self, name, description, attack):
self.attack = attack
super().__init__(name, description)
def __str__(self):
return "{}\n=====\n{}\nDamage: {}".format(self.name, self.description, self.attack)
class Enchanted(Weapons):
def __init__(self):
#error appears here
super().__init__(name="Enchanted Longsword", description="A prestine longsword you found with small runes inscribed along the Cross Guard. You feel a small magical force emanating from the weapon as you hold it.", attack = 12)
答案 0 :(得分:1)
您的__init__
课程中有两种Item
方法。第二个覆盖第一个,因为它只需要一个位置参数(self
),所以会抛出错误。简单修复:摆脱第二个__init__
。
我不确定,但也许你的意思是你的第二个__init__
是__str__
?
class Item(object):
def __init__(self, name, description):
self.name = name
self.description = description
def __str__(self):
return "{}\n=====\n{}\nDamage: {}".format(self.name, self.description)
答案 1 :(得分:0)
jme已经提供了一个很好的答案。我猜你正在尝试像方法重载或为Item
类创建不同的构造函数。
在python类中,您不能有两个同名方法。但是,您可以通过为方法参数提供默认值来实现此属性。像这样:
class Item(object):
def __init__(self, name=None, description=None):
self.name = name
self.description = description