So würde es funktionieren:
Code: Alles auswählen
template = make_flags_type("spam", "eggs")
flags = template()
flags.foo = True
flags.bar = True
print flags
print int(flags)
Edit:
Wie mir scheint, hast du noch nicht ganz verstanden was ich eigentlich mache. Nur noch mal kurz zur Erklärung. Es gibt zwei Objekte das erste ist ein Template-Objekt, welches nur die Flag-Namen und deren Werte(1,2,4,8,...) enthält. Also wie ein "enum" fungiert(könnte man sogar von einer enum-Implementation ableiten um etwas mehr funktionalität zu haben). Als zweites habe ich das FlagObject, dieses hat das interne Attribute "_flags", welches den genauen Wert des Flag-Objektes abbildet. Dieses kann frei manipuliert werden und ist im Prinzip lediglich ein Integer. Lediglich die erweiterte Methoden zum Bearbeiten machen diese Klasse erst *Sinnvoll*.snafu hat geschrieben:Ein Setzen von ``False`` müsste das Attribut ja dann mit ``0`` belegen, oder?
Ein weiterer Vorteil ist, das man von dem Template-Objekt beliebig viele Instanzen haben und nutzen kann, welche alle die gleichen Flags kennen, aber unterschiedlich gesetzt sind. Hatte BlackJack in seinem Beispiel oben vorgeführt.