2016-08-30 72 views
1

我收到错误,如问题所示,我找不出原因。即使在尝试其他解决此问题的stackoverflow方法时也不起作用。__init __()缺少1所需的位置参数:'数量'

感谢所有:)

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

为了帮助人们回答您的问题,您需要更加具体地了解错误。请[编辑]您的帖子以合并您运行[mcve]时的确切错误(最好使用复制+粘贴以避免转录错误)。特别是,不要忽略行号 - 它们通常是至关重要的。 –

回答

6

更改

Item.__init__(name, style, quantity,) 

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

在Python只需使用super继承(读here有详细介绍):

class Weapon(Item): 
    def __init__(self, name, style, quantity = 1): 
     super(Weapon, self).__init__(name, style, quantity) 
+0

尾随的逗号不会对你造成任何伤害。 –

2

你错过了在Item._init__()self。您可以

  1. 添加自:

    class Weapon(Item): 
    def __init__(self, name, style, quantity = 1): 
        Item.__init__(self, name, style, quantity) 
    
  2. 使用超:

    class Weapon(Item): 
    def __init__(self, name, style, quantity = 1): 
        super(Weapon, self).__init__(name, style, quantity) 
    
2

调用Item.__init__直接意味着你需要通过self作为第一个参数。简单地做Item.__init__(name, style, quantity)意味着它认为name是Item实例(self),style是名称,quantity是样式和数量缺失。

所以,你可以指定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()找出它应该使用什么方法。

相关问题