mau*_*ung 10 python sqlalchemy
我要重写__cmp__,__eq__和__hash__这样我就可以在SQLAlchemy的声明基本型号做的一组操作.这是否会导致与声明式基本实现发生冲突?
小智 5
也许,取决于比较功能的实现。
使用__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 []
Run Code Online (Sandbox Code Playgroud)
original not in (NEVER_SET, PASSIVE_NO_RESULT, None)如果比较不首先检查类型的相等性,或者比较中使用的字段是否存在,则该行可能会引发错误
作为解决方案,您应该考虑不同的类型。
还应避免重写,__cmp__而应使用丰富的比较运算符。
| 归档时间: |
|
| 查看次数: |
1421 次 |
| 最近记录: |