subklasse mit __new__ und __slots__

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.
Antworten
init-0
User
Beiträge: 38
Registriert: Samstag 22. Januar 2011, 18:46

Hi,

ich benutze sympy und würde gerne eine Subklasse von Integer erstellen.
Leider verwendet diese Klasse __new__ und __slots__ zusammen und ich möchte ein neues Attribut hinzufügen.

Code: Alles auswählen

class fieldNumber(Integer):
        #__slots__ = Integer.__slots__ + ["field"]
        def __new__(self, *args, field=None, **kwargs):
            r = Integer.__new__(self, *args, **kwargs)
            if field is None:
                field = Field()
            r.field = self.field = field # r has no attribute error
            return r
Ich würde gerne die slots der Klasse verändern, aber da das afaik nur durch subclassing geht, was durch das __new__ ignoriert wird, weiß ich nicht wie ich das machen soll.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@init-0: bei __new__ heißt der erste Parameter cls, weil er die zu erzeugende Klasse enthält. Und warum sollte man in __new__ eine Klassenvariable erzeugen? Und wo hast Du jetzt ein Problem, wenn Du __slots__ erweiterst? Bei mir tut das.
Antworten