Seite 2 von 2

Re: __new__ vs. __init__

Verfasst: Freitag 27. Mai 2011, 10:31
von snafu
@proofy: Was soll dein Konstrukt denn jetzt bitte mit dem Überladen von Methoden zu tun haben bzw inwiefern wird da etwas ausgeglichen, was einem wegen diesem nicht in Python vorhandenen Feature fehlen würde? Wenn ich "überladen" will, dann nutze ich Defaultwerte für Schlüsselwortargumente und/oder Typprüfungen innerhalb der Methode. Oder meintest du, dass du irgendwie `__new__()` nutzen willst, um `__init__()` zu überladen (was ich ziemlich wirsch fände)? Ich sehe halt nicht den Zusammenhang zwischen dem Thema dieses Threads und der von dir geäußerten Idee, diese Art von "Workaround" haben zu wollen.

Re: __new__ vs. __init__

Verfasst: Freitag 27. Mai 2011, 10:39
von BlackJack
@proofy: Hilfskrücke für was denn bitte? Wenn Du alternative ”Konstruktoren” willst, dafür gibt es Klassenmethoden. Deinen Vorschlag verstehe ich nicht? Wozu braucht man da eine `__new__()`-Methode? Die `__init__()` die anscheinend mit JSON-Daten gefüttert werden soll, wird ja nach der `__new__()` mit *deren* Argumenten auch noch einmal aufgerufen. Man würde da also nur das JSON-Argument sinnlos durch eine `__new__()`-Methode schleifen, die man überhaupt nicht benötigt. Das kann man auch alles in der `__init__()` machen.

Falls Du so etwas hier meintest:

Code: Alles auswählen

class Point(object):
    def __init__(self, x=0, y=0):
        self.x = x
        self.y = y

    @classmethod
    def from_dict(cls, dictionary):
        return cls(dictionary['x'], dictionary['y'])
Da braucht man kein `__new__()`.

Re: __new__ vs. __init__

Verfasst: Freitag 27. Mai 2011, 12:47
von proofy
Es kommt aus der C# und Java Welt, wo in Factories Objekte z.B. aus JSON erzeugt werden. Diese werden zunächst ohne Übergabe zum Konstruktor erzeugt und dann über Properties mit "aufgefüllt" . In meinem Fall habe ich mit IronPython gearbeitet und versucht eine JSON Objekt Fabrik aus .Net unter im Silverlight-Container zu verwenden. Da wusste ich noch nichts über __new__() und diese Fabriken aus einer anderen (Programmier)welt verwenden __new__() . Und hier im Forum konnte man mir Antworten geben, um das zu verstehen. Vielen Dank noch mal. :)