Überschreiben von __cmp__, __eq__ und __hash__ für SQLAlchemy Declarative Base

8

Ich möchte __cmp__ , __eq__ und __hash__ überschreiben, damit ich Operationen für ein SQLAlchemy Declarative Base-Modell festlegen kann. Wird dies Konflikte mit der deklarativen Basisimplementierung verursachen?

    
mauzepeda 10.08.2010, 20:33
quelle

2 Antworten

3

nein. Es wird gut funktionieren.

    
nosklo 10.08.2010, 20:39
quelle
3

Vielleicht, abhängig von der Implementierung der Vergleichsfunktion.

Sie müssen vorsichtig sein, wenn Sie __eq__ oder __cmp__ für den Vergleich mit dem Objekt other verwenden, da SQLAlchemy Ihr Objekt mit einigen Symbolen wie NEVER_SET vergleichen kann, die nicht den gleichen Typ haben. Sehen Sie sich diese SQLAlchemy-Methode an:

%Vor%

Die Zeile original not in (NEVER_SET, PASSIVE_NO_RESULT, None) kann einen Fehler verursachen, wenn der Vergleich nicht zuerst die Gleichheit der Typen oder das Vorhandensein der Felder überprüft, die im Vergleich verwendet werden.

Als Lösung sollten Sie unterschiedliche Typen berücksichtigen.

Vermeiden Sie auch das Überschreiben von __cmp__ und verwenden Sie stattdessen Rich-Vergleichsoperatoren .

    
Ovidiu S. 16.03.2016 15:25
quelle

Tags und Links