2012-12-16 5 views
10

Ich bin verwirrt. Ich versuche, eine Unterklasse zu erstellen, die sich nicht um irgendwelche Schlüsselwortparameter kümmert - sie übergibt sie einfach an die Oberklasse und legt explizit den einen Parameter fest, der für den Konstruktor erforderlich ist. Hier ist eine vereinfachte Version von meinem Code:Unerwartetes Schlüsselwortargument bei der Verwendung von ** Kwargs im Konstruktor

class BaseClass(object): 
    def __init__(self, required, optional=None): 
     pass 

def SubClass(BaseClass): 
    def __init__(self, **kwargs): 
     super(SubClass, self).__init__(None, **kwargs) 

a = SubClass(optional='foo') # this throws TypeError!?!?? 

Dieser schlägt mit

[email protected]$ python minimal.py 
Traceback (most recent call last): 
    File "minimal.py", line 9, in <module> 
    a = SubClass(optional='foo') 
TypeError: SubClass() got an unexpected keyword argument 'optional' 

Wie kann es zu einem unerwarteten Stichwort Argumente beschweren, wenn die Methode **kwargs hat?

(Python 2.7.3 auf Ubuntu)

Antwort

18
def SubClass(BaseClass): 

ist eine Funktion, keine Klasse. Es gibt keinen Fehler, da BaseClass ein Argumentname sein kann und verschachtelte Funktionen zulässig sind. Syntax macht Spaß, oder?

class SubClass(BaseClass): 
+8

uhh richtig. Vielen Dank./Ich rennt weg und versteckt mich – Leopd

0

Stolperte zu diesem Beitrag bei der Suche nach einer Antwort auf genau den gleichen Fehler, aber unterschiedliche Ursache.

Ich habe mein Problem (Python Anfänger Fehler) ausgearbeitet, aber ich dachte, ich sollte es hier aufstellen, falls es jemand anderem hilft.

Meine Projektstruktur:

project\ 
--package1\ 
----Module1.py 
----Module2.py 
--package2\ 
...blah blah blah... 

wo Module2 Module1 erstreckt und waren Klassennamen die gleichen wie die Modul/Dateinamen

In Module2.py, ich hatte:

from package1 import Module1 

angenommen, dass dies die Klassen importieren würde.

hat einen unerwarteten Stichwort Argument Fehler, als ich versuchte Module2 Klasse

Mod2 = Module2(kw1=var1, kw2=var2) 

unter Verwendung folgender

from package1.Module1 import Module1 

Das heißt [package name].[module name] import [class name]

hoffe, das hilft jemand anderes da draußen

zu erstellen
Verwandte Themen