与比较运营商预期相互排斥

时间:2014-05-24 22:56:09

标签: python logic mutual-exclusion

我不是编程天才,但只是在今年年初,当我被教授命题逻辑时,我的老师告诉我(并且很明显)如果P为真,则不是(P)或〜P是假的,如果P是假的则相反。

阅读有关创建自定义对象的Python文档,我发现他们声称a==bTrue并不意味着a!=bFalse。这让我感到困惑,因为我认为!=是对==的否定,因此,每当使用==进行评估时返回一个布尔结果,表达式!=将始终评估为相反......据我所知,not(True)评估为Falsenot(False)评估为True。有人可以帮我理解这是怎么发生的吗?也许有一个例子?

我读到了这个here

引用:

  

x == y的真相并不意味着x!= y是假的。

2 个答案:

答案 0 :(得分:3)

这是因为它们是可以单独自定义实现的运算符,并且运算符本身(在高级别)并不表示如果x==y为真,则x!=y为假(一个可以实施它们,以便不会出现这种关系。)

关键是文档中的声明:

  

因此,在定义__eq__()时,还应定义__ne__()   这样运营商就会按预期行事

当两者都实现时,运算符之间存在明确的关系。

答案 1 :(得分:0)

很大程度上这只是因为我们可以做愚蠢的事情:

class MessedUpShizzle:
    def __eq__(self, other):
        return True

    def __ne__(self, other):
        return True

MessedUpShizzle() == MessedUpShizzle()
#>>> True

MessedUpShizzle() != MessedUpShizzle()
#>>> True

如果您想知道 请注意x < yx >= y 反转:

{1} < {2}
#>>> False

{1} >= {2}
#>>> False

所以我们需要单独定义__ge____le__

相关问题