2011-01-17 12 views
2

Ich denke an **kwargs in einer ungewöhnlichen Art und Weise: als Datenanbieter und nicht als Überladung substituierendes Werkzeug. Auf diese Weise sollten alle Schlüsselwortargumente von einem Typ sein, zum Beispiel spezifisch gebildetes Tupel, und sonst nichts. Im Beispiel:Sind Kwargs eine gute Wahl für Nichtkonfigurationsdaten in __init__?

class SomeClass(object): 
    '''All **kwargs should be in ("string", 1, True) form''' 
    def __init__(self, some_param, **kwargs): 
     self.param = some_param 
     for arg in kwargs.itervalues(): 
      if not isinstance(arg[0], str): 
      ... 

     self.some_dict = kwargs 

Ist es in Ordnung, dies zu tun? Ich fühle ... seltsam, es scheint unkanonisch.

+0

Kennen Sie auch '* args'? – ulidtko

+0

@ulidtko Ja. Grundsätzlich geht es um beide Fragen, aber am Ende habe ich mich mit Kwargen geschlagen, weil sie komplexer sind. –

+1

Ich denke, dass dieser Code nicht das ist, was Sie erwarten. Kwargs ist ein Diktat, und seine Schlüssel sind immer Strings. Wenn Sie darüber iterieren (für arg in kwargs), ist arg immer eine Zeichenkette, also ist arg [0] auch immer eine Zeichenkette. –

Antwort

3

Sehen Sie was dict Konstruktor tut in Python:

>>> dict(one=1, two=2, three=3) 
{'three': 3, 'two': 2, 'one': 1} 

Auch eine "kreative" Verwendung von Keyword-Argumente. Wenn dies für einen Standardtyp funktioniert und in Ihrer Anwendung Sinn ergibt, gehen Sie darauf ein.

+0

Ich denke, die Schwerkraft konnte einfach nicht falsch sein. Vielen Dank! –

Verwandte Themen