Ist selbst .__ dict __. Update (** kwargs) gut oder schlecht?

In Python, sagen, ich habe einige Klasse Kreis erbt von Shape. Form muss x - und y-Koordinaten, und, darüber hinaus, Kreis braucht einen radius. Ich möchte in der Lage sein zu initialisieren Kreis von etwas wie,

c = Circle(x=1., y=5., r=3.)

Kreis erbt von Form, also muss ich verwenden benannte Argumente zu __init__ weil unterschiedliche Klassen erfordern verschiedene Konstruktoren. Ich könnte manuell einstellen x, y, und r.

class Shape(object):
    def __init__(self, **kwargs):
        self.x = kwargs['x']
        self.y = kwargs['y']

class Circle(Shape):
    def __init__(self, **kwargs):
        super(Circle, self).__init__(**kwargs)
        self.r = kwargs['r']

oder, ich hätte die Attribute von meinem Kreis-set automatisch mit self.__dict__.update(kwargs)

class Shape(object):
    def __init__(self, **kwargs):
        self.__dict__.update(**kwargs)

class Circle(Shape):
    def __init__(self, **kwargs):
        super(Circle, self).__init__(**kwargs)

Dies hat den Vorteil, dass es weniger code und ich brauche nicht zu erhalten boilerplate wie self.foo = kwargs['foo']. Der Nachteil ist, dass es nicht offensichtlich ist, welche Argumente benötigt werden, für Kreis. Ist dies als ein cheat oder ist das guter Stil (solange die Schnittstelle auf den Kreis ist gut dokumentiert)?


Dank, jeder, für Ihre durchdachten Antworten. Die self.__dict__.update(**kwargs) hack wurde für mich nützlich, im Experimentieren mit dem organisieren von meinem code, aber ich werde dafür sorgen, dass ich ersetzen, dass mit ordnungsgemäß übergeben Argumente ausdrücklich und tun klar Fehlerkontrolle in der Produktion code.

Kommentar zu dem Problem
Ich denke, das es erlauben würde ein Anrufer der überlastung der Methoden .... aber wenn Sie die einzige person, die mit dem code und sind nicht besorgt über schädliche Verhalten seine wahrscheinlich in Ordnung. Kommentarautor: Joran Beasley
@JoranBeasley - ja, aber wenn Sie das getan haben, sind Sie im wesentlichen brechen die Regeln, und es ist Ihre eigene Schuld. Kommentarautor: Chris Lutz
Sie sind das fehlende self. Kommentarautor: Steven Rumbalski

InformationsquelleAutor der Frage Alex Szatmary | 2012-03-15

Schreibe einen Kommentar