2012-12-16 16 views
10

Sono sconcertato. Sto cercando di creare una sottoclasse a cui non interessa i parametri delle parole chiave, ma li passa tutti insieme alla superclasse e imposta esplicitamente l'unico parametro richiesto per il costruttore. Ecco una versione semplificata del mio codice:Argomento di parole imprevisto quando si utilizza ** kwargs nel costruttore

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!?!?? 

Questo viene a mancare con

[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' 

Come può lamentarsi di un argomento chiave inaspettata quando il metodo ha **kwargs?

(Python 2.7.3 su Ubuntu)

risposta

18
def SubClass(BaseClass): 

è una funzione, non una classe. Non c'è alcun errore perché BaseClass potrebbe essere un nome argomento e sono consentite funzioni nidificate. La sintassi è divertente, non è vero?

class SubClass(BaseClass): 
+8

uhh giusto. Grazie./io scappa e mi nascondo – Leopd

0

Inciampato su questo post quando si cerca una risposta allo stesso errore, ma causa diversa.

Ho risolto il mio problema (errore dei principianti in pitone), ma ho pensato di inserirlo qui nel caso in cui aiuti qualcun altro.

La mia struttura del progetto:

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

dove Module2 estende Module1 e nomi di classe erano gli stessi come i nomi del modulo/dei file

In Module2.py, ho avuto:

from package1 import Module1 

partendo dal presupposto che questo avrebbe importato le classi all'interno.

ricevuto un errore inatteso argomento chiave quando ho cercato di creare Module2 Classe

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

risolto utilizzando

from package1.Module1 import Module1 

Questo è [package name].[module name] import [class name]

Spero che questo aiuti qualcun altro là fuori

Problemi correlati