Warum wird dieser Python-Ausdrucksparameter zum Zeitpunkt des Aufrufs nicht erweitert?

8

In Google Appengine NDB gibt es Anfragen wie folgt:

%Vor%

Wie kommt es, dass der Account.userid >= 40 -Ausdruck zum Zeitpunkt des Aufrufs nicht auf "True" oder "False" erweitert wird, bevor er als Argument übergeben wurde? Wie wird der Filterausdruck an die Abfrage übergeben? Ist das mit dem Überladen des Operators getan?

    
Tom 09.11.2017, 14:03
quelle

1 Antwort

1

Ignacio ist korrekt, der NDB-Code definiert benutzerdefinierte magische Methoden auf seiner Property class zur Vergleichsprüfung. Diese Funktionen ( __eq__ , __ne__ , __lt__ usw.) rufen alle diese benutzerdefinierte _comparison Funktion unter der Haube.

%Vor%

Wie Sie sehen, gibt der Code kein boolesches Ergebnis zurück, sondern gibt eine Instanz von FilterNode zurück, die selbst einen truthy / falsey-Wert für den Vergleich liefert.

  

Wie kommt es, dass der Account.userid >= 40 -Ausdruck zum Zeitpunkt des Aufrufs nicht auf "True" oder "False" erweitert wird, bevor er als Argument übergeben wurde?

Es wird technisch erweitert / ausgewertet, bevor die Funktion query() aufgerufen wird, es wird nur nicht auf einen booleschen Wert ausgewertet.

    
Jesse Webb 09.11.2017, 23:18
quelle