【发布时间】:2018-04-24 12:08:51
【问题描述】:
我试图实现一些通配符类,它与任何字符串比较相等,但对其他任何字符串都是假的。但是,!= 运算符似乎没有按预期调用我的__neq__ 成员:
class A(str):
def __cmp__(self, o):
return 0 if isinstance(o, str) else -1
def __eq__(self, o):
return self.__cmp__(o) == 0
def __neq__(self, o):
return self.__cmp__(o) != 0
a = A()
b = 'a'
print(a == b) # Prints True, as expected
print(a != b) # Prints True, should print False
我做错了什么?
【问题讨论】:
-
这是一个错字问题...
-
@Jean-FrançoisFabre:这是一个有趣的错字。这是熟悉 Windows 批处理文件的人会在其中将
!=拼写为NEQ的那种错字。或者这是将__ne__与__eq__混合会犯的记忆错误。所以错误更多的是头脑而不是手指。我同意关闭它,但不幸的是人们的反对票。这是一个结构良好的问题。 -
我已投票决定重新开放。答案就够了,但我不希望现在看到这个问题被关闭或删除,我找到了很多关于
__neq__错误的答案 -
虽然没有研究,但值得一票否决。 docs.python.org/3/reference/datamodel.html#object.__ne__
-
How much research effort is expected of Stack Overflow users? 答案,“很多。一个荒谬的数量。超过你认为你的能力。在你到达你的绳索的尽头和没有的痛苦之后答案超过了发布您的问题所带来的大量羞耻感,那时您可以继续提问。因为到那时,您将完成任何必要的研究,使其成为一个值得提出的好问题!”跨度>
标签: python methods comparison-operators