Enum mit toString

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
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

Hi Community,

ich arbeite an einer knappen und schlanken Enum Implementierung. Dabei will ich jedem Enum, aber auch einen sinnvollen Namen geben.

Das hab ich bisher bekommen, bin aber nicht ganz zufrieden:

Code: Alles auswählen

class MergePolicy(object):
    OVERWRITE, MORE_INFO = range(2)
    
    @staticmethod
    def toString(policy):
        try:
            return {MergePolicy.OVERWRITE : "Overwrite", MergePolicy.MORE_INFO : "More Information"}[policy]
        except KeyError:
            return "-"

def iter_attributes(obj):
    return ((n, getattr(obj, n)) for n in dir(obj) if (not n.startswith('_') and not n.startswith('toString')))
Dieses ganze "toString" stört mich. __str__ kann ich ja hier nicht sinnvoll implementieren, da ja das ganze noch einen Eingabeparameter brauch.

Habt hier sinnvolle Vorschläge?

Grüße,
anogayales
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Was genau für Eigenschaften braucht dein Enum denn ?
Eventuell reicht dir ja eine einfache Klasse.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

Eigentlich brauch ich nur die bereits oben implementierten Eigenschaften.

Also:
  • 1. Iterierbar
    2. eine to string methode
Im Notfall muss ich das ganze dann doch wohl instanzieren. Hab gedacht es würde eine statische Möglichkeit geben, die ein bisschen sauberer ist, als meine.

Grüße,
anogayales
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Du kannst Metaklassen verwenden.
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

Könntest du das kurz konkretisieren. Ich sehe grade nicht wie ich dadurch ein Enum, mit den obigen Eigenschaften implementieren könnte.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

enum_meta nutzt dieses Verfahren.
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

Vielen Dank!
Antworten