voglio ignorare __cmp__
, __eq__
, e __hash__
così posso fare operazioni di set su un modello dichiarativo SQLAlchemy Base. Ciò causerà conflitti con l'implementazione di base dichiarativa?Overriding __cmp__, __eq__ e __hash__ per SQLAlchemy dichiarativa Base
risposta
no. Funzionerà bene.
Forse, a seconda dell'implementazione della funzione di confronto.
dovete fare attenzione quando si usano __eq__
o __cmp__
per il confronto con l'oggetto other
, perché SQLAlchemy può confrontare il vostro oggetto con alcuni simboli come NEVER_SET
che non hanno lo stesso tipo. Date un'occhiata a questo metodo SQLAlchemy:
def get_all_pending(self, state, dict_):
if self.key in dict_:
current = dict_[self.key]
if current is not None:
ret = [(instance_state(current), current)]
else:
ret = [(None, None)]
if self.key in state.committed_state:
original = state.committed_state[self.key]
if original not in (NEVER_SET, PASSIVE_NO_RESULT, None) and \
original is not current:
ret.append((instance_state(original), original))
return ret
else:
return []
La linea original not in (NEVER_SET, PASSIVE_NO_RESULT, None)
può sollevare un errore se il confronto non verifica l'uguaglianza dei tipi di prima, o per l'esistenza dei campi che vengono utilizzati nel confronto
Come soluzione, è necessario tenere conto di diversi tipi.
Evitare inoltre di ignorare __cmp__
e utilizzare rich comparison operators instead.
Buona cattura! Questo è importante. –
- 1. Python: È un modo corretto di ignorare __eq__ e __hash__?
- 2. SQLAlchemy. Caricamento colonna dichiarativa e differita
- 3. utilizzo di flask-sqlalchemy senza la base dichiarativa sottoclasse
- 4. Qual è l'ordine della valutazione __hash__ e __eq__ per un ditt di Python?
- 5. Stringa di override Python __hash__
- 6. Definizione dichiarativa SQLAlchemy molti a molti per utenti, gruppi e ruoli
- 7. Come implementare una buona funzione __hash__ in python
- 8. Autorizzazione dichiarativa e if_attribute non funzionanti
- 9. ereditarietà CSS e overriding it
- 10. Calling "Base-Getter" in Overriding Getter della Proprietà
- 11. Overriding Backbone.Collection.prototype.add
- 12. SQLAlchemy: evitare la ripetizione nella definizione della classe di stile dichiarativa
- 13. Overriding AppConfig.ready()
- 14. Ereditarietà SQLAlchemy
- 15. Overriding Construct
- 16. L'oggetto 'super' non ha attributo '__eq__'
- 17. Clone di overriding con e senza Cloneable
- 18. Java FX: dichiarativa vs procedurale
- 19. python total_ordering: perché __lt__ e __eq__ invece di __le__?
- 20. CSS Module, React e Overriding CSS Classes
- 21. Django - Overriding get_form per personalizzare i moduli di amministrazione in base alla richiesta
- 22. Scorciatoia per metodi Overriding in Android Studio
- 23. Overriding System.Diagnostics.Trace.WriteLine per accedere a un file
- 24. Overriding Scala enumerazione Valore
- 25. HandleUnauthorizedRequest not overriding
- 26. overriding django collectt
- 27. Hacking/Overriding Javascript
- 28. Overriding devise SessionsController destroy
- 29. Richfaces Skin Overriding Styleclass
- 30. Overriding -handlePan: in UIScrollView
Grazie mille :) – mauzepeda
Puoi citare qualsiasi documentazione SQLAlchemy che suggerisce che questo sarebbe ok? – DuneBug
@DuneBug Non riesco a capire perché sarebbe un problema. Lo stesso Sqlalchemy non sovrascrive quei metodi speciali per la base dichiarativa. – nosklo