我想覆蓋__cmp__
,__eq__
和__hash__
,因此我可以對SQLAlchemy聲明性基礎模型進行設置操作。這是否會導致與聲明性基礎實施的衝突?爲SQLAlchemy覆蓋__cmp__,__eq__和__hash__聲明性基地
8
A
回答
4
沒有。它會工作得很好。
2
也許,這取決於比較功能的實現。
您可以選擇使用__eq__
或__cmp__
時與other
對象比較,因爲SQLAlchemy的可以用一些符號,如NEVER_SET
不具有相同類型的比較你的對象要小心。看看這個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 []
的original not in (NEVER_SET, PASSIVE_NO_RESULT, None)
線可能會引發錯誤,如果比較不檢查類型的平等第一,或者對於要在比較中使用的字段的存在
作爲解決方案,您應該考慮不同的類型。
也避免重寫__cmp__
並使用rich comparison operators instead。
+0
好趕上!這個很重要。 – 2016-06-25 20:27:03
相關問題
- 1. 如何斷言類覆蓋默認__hash__和__eq__
- 2. Python:這是覆蓋__eq__和__hash__的好方法嗎?
- 3. 覆蓋sqlalchemy中的__eq__運算符
- 4. 聲明基於覆蓋片
- 5. 通過__hash__實現__eq__?
- 6. 覆蓋__cmp__ python函數
- 7. 爲什麼Tensorflow不會覆蓋__eq__?
- 8. MVC3 - 在基類聲明上覆蓋屬性
- 9. 推薦的方法來實現__eq__和__hash__
- 10. Python字典的__hash__和__eq__評估的順序是什麼?
- 11. 透明地面覆蓋
- 12. C#:基地,虛擬和覆蓋
- 13. sqlalchemy:聲明性基礎如何導入自己的類
- 14. 如何覆蓋父屬性(將父屬性重新聲明爲靜態變量)?
- 15. SQLAlchemy惰性聲明式繼承
- 16. 函數聲明不會被覆蓋
- 17. 如果聲明覆蓋圖像
- 18. Typescript - 如何在lib.d.ts中覆蓋聲明
- 19. Var聲明會覆蓋當前變量
- 20. 如何覆蓋視圖佈局聲明
- 21. SqlAlchemy遷移聲明
- 22. Git pull聲明新的本地文件將被覆蓋
- 23. CSS繼承 - 爲什麼後面的聲明被'早期'聲明覆蓋?
- 24. 在金字塔中使用SQlAlchemy聲明性基礎和自動加載= true
- 25. 如何定義元類爲從SQLAlchemy的聲明基礎
- 26. 好的__eq__,__lt__,...,__hash__圖像類的方法?
- 27. SQLAlchemy的:聲明ORM - 使用GIST和TSRANGE
- 28. 覆蓋爲父類中的EntityManager聲明的持久性上下文unitName。
- 29. 基於sqlalchemy聲明基礎的另一個字段onupdate
- 30. Python:__cmp__和__str__?
非常感謝:) – mauzepeda 2010-08-10 20:50:47
你可以引用任何建議這可以正常運行的SQLAlchemy文檔嗎? – DuneBug 2013-04-03 23:50:39
@DuneBug我看不出爲什麼這會是一個問題。 Sqlalchemy本身不會覆蓋聲明性基礎的特殊方法。 – nosklo 2013-04-08 17:54:54