Python 语句 : sometimes True, 有时为 False。为什么?

标签 python python-2.7 boolean behavior

我想更好地理解 Python 中的 OOP,并编写了一些描述(无限)序数算术的代码。我定义了一个名为 Omega() 的类使用常用的比较运算符( ==<= 等)、加法和乘法。

我想我会检查(应该是真的)第一个无限序数是否小于或等于第一个不可数序数。启动交互式 shell,这是我发现的:

    >>> a, b = Omega(), Omega(1)
    >>> (a+a) <= b
    False
    >>> (a+a) <= b
    True
    >>> (a+a) <= b
    False

同一个表达式产生不同的真值。

我继续测试这个表达式,但没有发现任何规律。如果我重新解释代码,我发现重复测试表达式会产生不同的 True 序列。/False值(value)观。

是什么导致了这种行为?

如果相关,我在 Windows 8.1 上使用 CPython 2.7.5。

这是我运行的 Python 代码:http://pastebin.com/XPqMphBw

最佳答案

我相信你重载了 <=>=运营商不正确。而不是:

def __leq__(self, other):
# ...
def __geq__(self, other):

改用这个:

def __le__(self, other):
# ...
def __ge__(self, other):

进行这些更改并在 Python 3.4.1 中运行后,我得到:

>>> a, b = Omega(), Omega(1)
>>> (a+a) <= b
True
>>> (a+a) <= b
True
>>> (a+a) <= b
True

关于Python 语句 : sometimes True, 有时为 False。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25210096/

相关文章:

javascript - Vue JS - 如何使用单选按钮显示或隐藏元素

mysql - 另一列中包含的 boolean 值列 - SQL

python - 使用 matplotlib 调整图例中的线条颜色

Python Pandas 嵌套 MongoDB

python - 在 python 函数中使用可选的跟踪变量

python - 赋值前引用的另一个局部变量 - Python

python - Django REST Framework 序列化 ForeignKey 和 ManyToManyFields

python - 在 Bokeh LabelSet 中更改文本字体大小

python - 使用 PIL 或 Scipy 将 Python 图像从 RGB 转换为单 channel

c# - PropertyGrid 中 boolean 属性的自定义编辑器 (C#)