__init __()缺少1个必要的位置参数:'数量'

时间:2016-08-30 15:22:46

标签: python python-3.x

我收到了问题中显示的错误,我无法弄清楚原因。即使尝试其他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'

旁注:以下所有答案都是正确的

4 个答案:

答案 0 :(得分:6)

更改

Item.__init__(name, style, quantity,)

super().__init__(name, style, quantity)

答案 1 :(得分:2)

您在self中缺少 Item._init__() 。你可以

  1. 添加自我:

    class Weapon(Item):
    def __init__(self, name, style, quantity = 1):
        Item.__init__(self, name, style, quantity)
    
  2. 使用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)