Python的内置bool方法__ror__的目的是什么?

时间:2014-08-08 20:09:18

标签: python built-in built-in-types

在交互式解释器中,如果您键入以下内容,您可以看到一些非常有趣的内容:

1)help()

2)modules

3)__builtin__

在阅读输出一段时间后,我在class bool中遇到了这些行:

__or__(...)
    x.__or__(y) <==> x|y

然后是:

__ror__(...)
    x.__ror__(y) <==> y|x

最后一种方法似乎描述了 reverse或。为什么这种方法存在?什么可能导致__or__(...)返回与__ror__(...)不同的任何内容?

1 个答案:

答案 0 :(得分:6)

假设您编写自己的整数类,并希望它与内置整数一起使用。您可以定义__or__

class MyInt(int):

    def __or__(self, other):
        # Not a recommended implementation!
        return self | int(other)

这样你就可以编写像

这样的代码了
# Because this is equivalent to MyInt.__or__(MyInt(6), 7)
MyInt(6) | 7

然而,Python不知道如何处理

# First interpretation is int.__or__(7, MyInt(6))
7 | MyInt(6)

因为int.__or__不知道如何使用MyInt的实例。在这种情况下,Python交换操作数的顺序并尝试

MyInt.__ror__(MyInt(6), 7)

也就是说,在右手参数的类中查找魔术方法的交换版本。