Hey, ich habe gerade angefangen darüber nachzudenken, als ich auf einen Code stieß, der ein Objekt mit bestimmten Attributen erwartete (aber ohne Angabe, welchen Typ dieses Objekt haben sollte).Kürzeste Möglichkeit, ein Objekt mit beliebigen Attributen in Python zu erstellen?
Eine Lösung wäre, eine neue Klasse mit den Attributen zu erstellen, die der Code erwartet, aber wenn ich anderen Code anrufe, der auch Objekte mit (anderen) Attributen benötigt, müsste ich immer mehr Klassen erstellen.
Eine kürzere Lösung ist eine generische Klasse zu erstellen, und legen Sie dann die Attribute auf Instanzen davon (für diejenigen, die sich für eine Instanz von object
anstelle eine neue Klasse zu erstellen, die nicht seit object
Instanzen arbeiten don erlaube keine neuen Attribute.
Die letzte, kürzeste Lösung kam ich mit war eine Klasse mit einem Konstruktor zu erstellen, die Keyword-Argumente übernimmt, genau wie der dict
Konstruktor, und dann setzt sie als Attribut:
class data:
def __init__(self, **kw):
for name in kw:
setattr(self, name, kw[name])
options = data(do_good_stuff=True, do_bad_stuff=False)
Aber ich kann‘ t Hilf mir das Gefühl zu haben, etwas Offensichtliches verpasst zu haben ... Gibt es dafür keine integrierte Methode (vorzugsweise in Python 2.5 unterstützt)?
Jeder Python (mit Ausnahme einiger goofballs die stdlib schreiben) Namen ihren Klassen mit Großgeschriebene Wörter, die den Leuten helfen zu erkennen, welche Namen sie repräsentieren. Außerdem ist es eine gute Angewohnheit, immer von "Objekt" zu erben, also verwenden Sie * neue Stilklassen *. –
Ja, ich wollte, dass die Klasse wie ein Datentyp aussieht, da sie keine Klassenfunktionalität hat (was auch der Grund ist, warum ich bewusst keine neuen Stilklassen verwende, da ich keine Methodenauflösungsreihenfolge verwenden kann). Aber die Klasse sollte wahrscheinlich einen großgeschriebenen Namen haben, du hast Recht. – Blixt