我想知道在SELECT
tref_log_metrics_weights_and_factors.metric_title,
DCount("[metric_weight]","tref_log_metrics_weights_and_factors","[metric_weight]<>0") AS metric_count,
Dsum("[metric_weight]","tref_log_metrics_weights_and_factors") AS metric_sum,
(([metric_count]*[tref_log_metrics_weights_and_factors].[metric_weight])/[metric_sum]) AS metric_N
FROM
tref_log_metrics_weights_and_factors
中有一个不相等的运算符的原因。
以下剪辑:
python
输出:
class Foo:
def __eq__(self, other):
print('Equal called')
return True
def __ne__(self, other):
print('Not equal called')
return True
if __name__ == '__main__':
a = Foo()
print(a == 1)
print(a != 1)
print(not a == 1)
这实际上不会引起很多麻烦:
Equal called
True
Not equal called
True
Equal called
False
可以同时正确。此外,这在忘记实施A == B and A != B
时会引入潜在的陷阱。
答案 0 :(得分:7)
根据一个人的需要,有些情况是平等和不平等不相反;但是,绝大多数情况都是相反的,所以在Python 3中如果你没有指定__ne__
方法,Python会为你反转__eq__
方法。
如果您要编写的代码可以在Python 2和Python 3上运行,那么您应该同时定义它们。
答案 1 :(得分:1)
根据data model documentation,它涵盖&#34;魔术方法&#34; ,您可以在课程上实施(强调我的):
比较运营商之间没有隐含的关系。的的
x==y
的真实性并不意味着x!=y
是错误的。因此,何时 定义__eq__()
,还应定义__ne__()
以便{。}} 运营商将按预期行事。
答案 2 :(得分:-2)
似乎您要返回True
而不是进行比较。