Ordne Vergleichsoperatoren dem Funktionsaufruf zu

8

Ich baue eine DSL für die Formularvalidierung in Python und eine der Anforderungen besteht darin, dass ein Feld größer oder kleiner als eine Konstante oder ein anderer Feldwert sein kann. Als Ergebnis versuche ich, Operatoren wie < , > , <= und >= den entsprechenden Funktionen im Modul operator zuzuweisen, damit sie während der Feldüberprüfung aufgerufen werden können.

Ich weiß, dass ich einfach ein Wörterbuch erstellen könnte, um den Operator der Funktion zuzuordnen, aber gibt es einen schöneren Weg dazu? Gibt es eine Möglichkeit, auf das integrierte Python-Mapping zuzugreifen?

    
Daniel Roseman 24.07.2010, 10:52
quelle

2 Antworten

4

Soweit mir bekannt ist, gibt es kein integriertes Dictionary, das den String ">" auf die Funktion operator.lt usw. abbildet.

Wie andere bereits erwähnt haben, verwendet der Python-Interpreter selbst kein solches Wörterbuch, da beim Parsen und Ausführen von Python-Code zuerst die Zeichenfolge "& gt;" zu einem Token, das diesen Operator darstellt, der dann in Bytecode übersetzt wird, und das Ergebnis der Ausführung dieses Bytecodes führt die Methode __lt__ direkt und nicht über die Funktion operator.lt aus.

    
jchl 26.07.2010, 12:11
quelle
3

Pythons internes Mapping von "& lt;" to __lt__ (und so weiter) ist nirgends in der Standardbibliothek verfügbar. Es gibt eine Menge über Pythons Interna, die nicht als Toolkit verfügbar sind. Ich bin mir überhaupt nicht sicher, wie solch ein Mapping erstellt werden würde. Was mappt auf __getitem__ ?

Sie müssen nur Ihr eigenes Mapping erstellen. Es sollte nicht schwierig sein.

    
Ned Batchelder 25.07.2010 13:05
quelle

Tags und Links