嗨,我压倒一切__cmp__.如果传递的第二个对象是None,或者它不是实例someClass,则返回-1.
我不明白这里到底发生了什么.
class someClass():
def __cmp__(self, obj):
if obj == None:
return -1
if not isinstance(obj, someClass):
return -1
Run Code Online (Sandbox Code Playgroud)
我的测试功能:
def test_function(self):
obj1 = someClass()
self.assertTrue(obj1 < None)
# I get true.
self.assertTrue(obj1 > None)
# I get failure as False is returned.
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释一下:
True或False何时更改比较标志?惯例__cmp__是:
a < b : return -1
a = b : return 0
a > b : return 1
Run Code Online (Sandbox Code Playgroud)
当然,这使得只有当正义a和b兼容类型,比如说数字.如果你有一个'极端情况',其中a或者b是None或不兼容(not instanceof),你应该报告错误,因为这是在你的实例上使用比较运算符时的编程错误someClass.
有可能实现任何行为__cmp__,但与OP描述的方式进行比较最终会导致奇怪的行为和错误.
另见:__ lt__而不是__cmp__
http://docs.python.org/reference/datamodel.html#object.__cmp__