我想更好地理解 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/