2016-08-30 1 views
1

Ich bekomme den Fehler, wie in der Frage gezeigt, und ich kann nicht herausfinden, warum. Selbst wenn Sie andere stackoverflow-Methoden ausprobieren, funktioniert das nicht.__init __() fehlt 1 benötigt positional Argument: 'Menge'

Dank alle :)

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) 

Edit: Danke an alle, diese Frage beantwortet wurde :)

Edit 2: Die Zeilen mit den Fehlercodes betroffen:

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' 

Nebenbei bemerkt : Alle Antworten sind richtig

+0

Um Menschen bei der Beantwortung Ihrer Frage zu helfen, müssen Sie den Fehler genauer angeben. Bitte [bearbeiten] Sie Ihren Post, um die genauen Fehler zu integrieren, die Sie beim Ausführen von [mcve] erhalten (vorzugsweise mit copy + paste, um Übertragungsfehler zu vermeiden). Lassen Sie insbesondere die Zeilennummern nicht aus - sie sind oft entscheidend. –

Antwort

6

Ändern

Item.__init__(name, style, quantity,) 

für

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

einfach super für Vererbung in Python (lesen here für weitere Details):

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

das nachfolgende Komma tut nicht schaden, nur damit Sie wissen. –

2

Sie verpassen self im Item._init__(). Sie können entweder

  1. selbst hinzufügen:

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

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

aufrufen Item.__init__ direkt bedeutet, dass Sie self als erstes Argument übergeben müssen. Einfach tun bedeutet, dass es denkt, dass name ist die Item-Instanz (Selbst) und Stil ist der Name, Menge ist der Stil und Menge fehlt.

So können Sie nur self als erstes Argument angeben:

Item.__init__(self,name, style, quantity) 

Oder da die __init__ in keiner Weise unterscheidet man kann es einfach nicht zu überschreiben:

class Armour(Item): 
    #default to using Item.__init__, no problem here 
## def __init__(self, name, style, quantity = 1): 
##  Item.__init__(name, style, quantity) 

Obwohl diese Mittel dass quantity jetzt ein erforderliches Argument ist, aber ich denke nicht, dass das ein Problem sein wird.

Oder wie andere bereits gesagt haben, können Sie super() verwenden, um herauszufinden, welche Methoden es verwenden soll.

Verwandte Themen