第一个使用对象的__ne__
方法,而第二个使用对象的__eq__
方法并否定其结果。
虽然两种方法都应该对结果进行配对,因此a == b
暗示not a != b
这实际上并不是必需或强制执行的。
比较运营商之间没有隐含的关系。 x==y
的真相并不意味着x!=y
是错误的。因此,在定义__eq__()
时,还应定义__ne__()
,以便运算符按预期运行。
在你的情况下,choice
是一个字符串(我猜?),它没有真正的区别。内置类型都确保==
和!=
之间的反比关系。所以唯一的区别就是在查看代码时它是多么容易理解。我个人更喜欢更简洁的第一版。