Seite 1 von 1

"Statische Prüfung"

Verfasst: Dienstag 24. Juli 2007, 13:39
von ws
Hallo,

für ein Projekt hätte ich gerne die Möglichkeit, symbolische Konstanten zu definieren. In C/C++ kann man ja enums benutzen, sowas wie

Code: Alles auswählen

enum SortBy {LEXICAL, LAST_USED};

void listObjects(SortBy sortBy = LAST_USED) {
        if (LEXICAL == sortBy) {
                cout << "Sorted lexically";
        }
        else if (LAST_USED == sortBy) {
                cout << "Sorted by age";
        }

Natürlich könnte man auch einfach nur Strings verwenden, bei der o.g. Methode kann der Compiler aber feststellen, ob die genannten Konstanten existieren.

In Python geht das wegen der grösseren Dynamik so ja nicht. Man kann sich natürlich einfach entsprechende globale Namen bauen (richtige Konstanten gibt's ja nicht), wie

Code: Alles auswählen

LEXICAL = 1
LAST_USED = 2
usw., dann könnte Pychecker oder Pylint sowas auch finden, aber wenn man viele Konstanten hat, ist das natürlich immer noch lästig. Gibt's da für Python irgendwelche sinnigen Lösungen, wie man sowas wie statische Prüfung realisieren kann?

Gruss

Wolfgang

Verfasst: Dienstag 24. Juli 2007, 14:13
von BlackJack
Eine statische Prüfung geht nicht. Das liegt in der Natur der Sprache.

Es gibt allerdings ein paar `Enum`-Klassen, die zumindest dynamisch ein richtiger eigenständiger Typ sind und nicht einfach nur Zahlen.

http://cheeseshop.python.org/pypi/enum/0.4.2
https://launchpad.net/munepy/

Ansonsten sollte man sich fragen, ob man wirklich so viele Konstanten braucht. In einer Umsetzung des C++-Quelltextes könnte man in Python zum Beispiel einfach eine entsprechende Sortier- oder Schlüsselfunktion übergeben.

Verfasst: Dienstag 24. Juli 2007, 14:24
von ws
Hallo Blackjack,

vielen Dank für die Links, schaue ich mir mal an.

Gruss

Wolfgang