Flags setzen mit ``|``-Operator

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
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Habe es mal an deine gewüschte Form angepasst, aber um das Template-Objekt kommt ich nicht herum, da dieses die Flags mit ihren Werten verwaltet und ein FlagObject nur ob sie Wahr oder Falsch sind.
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)
Wobei "spam" und "eggs" nicht sein müssen, diese dienen lediglich der Veranschaulischung, das die Flags dynamisch angehangen werden können.


Edit:
snafu hat geschrieben:Ein Setzen von ``False`` müsste das Attribut ja dann mit ``0`` belegen, oder?
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*.
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.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Antworten