1

考虑以下类定义:

class Symbolic(object):
    def __eq__(self, rhs):
        return Symbolic()
    def __le__(self, rhs):
        return Symbolic()
    def __gt__(self, rhs):
        return Symbolic()
    def __contains__(self, other):
        return Symbolic()

类上定义的操作行为如下:

x = Symbolic()
y = Symbolic()

x == y    -->   <Symbolic object at ...>
x <= y    -->   <Symbolic object at ...>
x > y     -->   <Symbolic object at ...>
y in x    -->   True  # huh?

根据标题,我的问题是:为什么 Python 运行时将运算符的输出显式强制为布尔类型,而不是其他预期返回布尔值( 、、、等)in的比较运算符的输出?==<=>

编辑:文档分别对in运算符和丰富的比较进行了以下说明:

  • 对于定义__contains__()方法的用户定义类,x in y当且仅当y.__contains__(x)为真时为真。

  • 按照惯例,成功比较返回 False 和 True。但是,这些方法可以返回任何值,因此如果在布尔上下文中使用比较运算符(例如,在 if 语句的条件中),Python 将对值调用 bool() 来确定结果是真还是假.

问题仍然存在:为什么需要区分?

4

0 回答 0