__new__ vs. __init__

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
snafu
User
Beiträge: 5520
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Freitag 27. Mai 2011, 10:31

@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.
shcol (Repo | Doc | PyPi)
BlackJack

Freitag 27. Mai 2011, 10:39

@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__()`.
proofy
User
Beiträge: 32
Registriert: Montag 21. März 2011, 12:47

Freitag 27. Mai 2011, 12:47

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. :)
Antworten