2012-12-16 11 views
10

Jestem zdziwiony. Próbuję utworzyć podklasę, która nie dba o żadne parametry słowa kluczowego - po prostu przekazuje je wszystkie tak, jak jest do klasy nadrzędnej, i jawnie ustawia jeden parametr wymagany dla konstruktora. Oto uproszczona wersja mojego kodu:Nieoczekiwany argument słowa kluczowego podczas używania ** kwargs w konstruktorze

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

nie ten z

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

Jak może narzekać nieoczekiwane słowa kluczowego argumentu gdy metoda ma **kwargs?

(Python 2.7.3 Ubuntu)

Odpowiedz

18
def SubClass(BaseClass): 

jest funkcją nie klasy. Nie ma błędu, ponieważ BaseClass może być nazwą argumentu, a funkcje zagnieżdżone są dozwolone. Składnia jest fajna, prawda?

class SubClass(BaseClass): 
+8

uhh w prawo. dzięki./ja ucieka i chowa się – Leopd

0

Natknęliśmy się na to stanowisko, szukając odpowiedzi na dokładnie ten sam błąd, ale inna przyczyna.

Opracowałem mój problem (błąd Pythona dla początkujących), ale pomyślałem, że powinienem go tutaj umieścić na wypadek, gdyby pomógł komuś innemu.

Moja struktura projektu:

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

gdzie Module2 rozciąga Module1 i nazwy klas były takie same jak nazwy modułu/plików

W Module2.py miałem:

from package1 import Module1 

przy założeniu, że zaimportuje to klasy w ramach.

otrzymał nieoczekiwany błąd argumentu słowo kluczowe, kiedy starałem się stworzyć Module2 Class

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

Poprawiono za pomocą

from package1.Module1 import Module1 

czyli [package name].[module name] import [class name]

Nadzieja to pomaga ktoś tam

Powiązane problemy