Seite 1 von 1

Enum mit toString

Verfasst: Montag 20. Dezember 2010, 13:39
von anogayales
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

Re: Enum mit toString

Verfasst: Montag 20. Dezember 2010, 13:47
von Xynon1
Was genau für Eigenschaften braucht dein Enum denn ?
Eventuell reicht dir ja eine einfache Klasse.

Re: Enum mit toString

Verfasst: Montag 20. Dezember 2010, 15:07
von anogayales
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

Re: Enum mit toString

Verfasst: Montag 20. Dezember 2010, 15:22
von DasIch
Du kannst Metaklassen verwenden.

Re: Enum mit toString

Verfasst: Montag 20. Dezember 2010, 20:02
von anogayales
Könntest du das kurz konkretisieren. Ich sehe grade nicht wie ich dadurch ein Enum, mit den obigen Eigenschaften implementieren könnte.

Re: Enum mit toString

Verfasst: Montag 20. Dezember 2010, 20:58
von DasIch
enum_meta nutzt dieses Verfahren.

Re: Enum mit toString

Verfasst: Montag 20. Dezember 2010, 22:28
von anogayales
Vielen Dank!