wie die Argumente übergeben, die effizient (**kwargs in python)

Habe ich eine Klasse, die erbt von 2 anderen Klassen. Diese sind die Basis Klassen:

class FirstBase(object):
      def __init__(self, detail_text=desc, backed_object=backed_object,
                   window=window, droppable_zone_obj=droppable_zone_obj,
                   bound_zone_obj=bound_zone_object,
                   on_drag_opacity=on_drag_opacity):
          # bla bla bla

class SecondBase(object):
      def __init__(self, size, texture, desc, backed_object, window):
          # bla bla bla

- Und das ist das Kind:

class Child(FirstBase, SecondBase):
       """ this contructor doesnt work
       def __init__(self, **kwargs):
          # PROBLEM HERE
          #super(Child, self).__init__(**kwargs)
       """
       #have to do it this TERRIBLE WAY
       def __init__(self, size=(0,0), texture=None, desc="", backed_object=None,
                    window=None, droppable_zone_obj=[], bound_zone_object=[],
                    on_drag_opacity=1.0):
          FirstBase.__init__(self, detail_text=desc, backed_object=backed_object,
                             window=window, droppable_zone_obj=droppable_zone_obj,
                             bound_zone_obj=bound_zone_object,
                             on_drag_opacity=on_drag_opacity)
          SecondBase.__init__(self, size, texture, desc, backed_object, window)

Wollte ich es lösen, alles schön mit **kwargs aber wenn ich die erste auskommentiert Konstruktor bekomme ich TypeError: __init__() got an unexpected keyword argument 'size'.

Irgendwelche Ideen, wie ich es machen kann, die Arbeit mit **kwargs?

  • Bei der ersten Lesung dieses (und nicht Massiv in die Tiefe ich zugeben), mein Erster Gedanke ist "gibt es wirklich zwei Basis-Klassen?" Es scheint viel zu viel überlappung zwischen den beiden; ie, SecondBase sieht aus wie es sein sollte Erben FirstBase re-Implementierung einiger Methoden und hinzufügen von anderen, was würden Sie dann machen es die einzige Basis für Child und vereinfachen Sie Ihre Hierarchie und OO-design
  • Ich brauche, um Sie zu beheben (einige code Bereinigung), aber Nein, Sie sind verschiedene Basen... ich kenn die Lösung für dieses problem
  • Die derzeit akzeptierte Antwort von Diedrich ist ungenau, um den Umfang meiner Kenntnisse. Ich habe meine Antwort hier: stackoverflow.com/a/32135160/2801814
InformationsquelleAutor kosta5 | 2012-10-29
Schreibe einen Kommentar