我希望在
Python中更好地理解OOP,并编写了一些描述(无限)序数算法的代码.我用通常的比较运算符(==,< =等),加法和乘法定义了一个名为Omega()的类. 我想我会检查(应该是真的)添加到自身的第一个无限序数是否小于或等于第一个不可数序数.启动交互式shell,这是我发现的:
>>> a, b = Omega(), Omega(1)
>>> (a+a) <= b
False
>>> (a+a) <= b
True
>>> (a+a) <= b
False
相同的表达式产生不同的真值.
我继续测试表达式,无法发现任何模式.如果我重新解释代码,我发现反复测试表达式会产生不同的True / False值序列.
什么可能导致这种行为?
如果它是相关的,我在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