我收到了问题中显示的错误,我无法弄清楚原因。即使尝试其他stackoverflow方法来解决这个问题,它也无法正常工作。
全部谢谢:)
class Item(object):
def __init__(self, name, style, quantity):
self.name = name
self.style = style
self.quantity = quantity
def itemadd(self):
inventory.append(Item)
class Weapon(Item):
def __init__(self, name, style, quantity = 1):
Item.__init__(name, style, quantity,)
def weaponadd(self):
inventory.append(Weapon)
class Ammo(Item):
def __init__(self, name, style, quantity = 1):
Item.__init__(name, style, quantity)
def ammoadd(self):
inventory.append(Ammo)
class Armour(Item):
def __init__(self, name, style, quantity = 1):
Item.__init__(name, style, quantity)
def armouradd(self):
inventory.append(Armour)
Bow = Weapon(name = "Bow", style = "WRanged", quantity = 1)
编辑:谢谢大家,这个问题已经回答:)
编辑2:受错误代码影响的行:
Traceback (most recent call last):
File "C:\Stuff\SG\Work\Inventory.py", line 33, in <module>
Bow = Weapon(name = "Bow", style = "WRanged", quantity = 1)
File "C:\Stuff\SG\Work\Inventory.py", line 12, in __init__
Item.__init__(name, style, quantity,)
TypeError: __init__() missing 1 required positional argument: 'quantity'
旁注:以下所有答案都是正确的
答案 0 :(得分:6)
更改
Item.__init__(name, style, quantity,)
的
super().__init__(name, style, quantity)
答案 1 :(得分:2)
您在self
中缺少 Item._init__()
。你可以
添加自我:
class Weapon(Item):
def __init__(self, name, style, quantity = 1):
Item.__init__(self, name, style, quantity)
使用super:
class Weapon(Item):
def __init__(self, name, style, quantity = 1):
super(Weapon, self).__init__(name, style, quantity)
答案 2 :(得分:2)
直接调用Item.__init__
意味着您需要传递self
作为第一个参数。简单地做Item.__init__(name, style, quantity)
意味着它认为name
是Item实例(self),style是名称,数量是样式和数量缺失。
所以你可以指定self
作为第一个参数:
Item.__init__(self,name, style, quantity)
或者由于__init__
没有任何不同,你根本不能覆盖它:
class Armour(Item):
#default to using Item.__init__, no problem here
## def __init__(self, name, style, quantity = 1):
## Item.__init__(name, style, quantity)
虽然这意味着quantity
现在是必需的参数,但我认为这不是问题。
或者其他人已经说过你可以使用super()
来确定应该使用哪种方法。
答案 3 :(得分:1)
只需在Python中使用super
进行继承(有关详细信息,请阅读here):
class Weapon(Item):
def __init__(self, name, style, quantity = 1):
super(Weapon, self).__init__(name, style, quantity)