为什么"或"和"|" 运营商共享相同的"__or__"魔术方法?

Ala*_*ian 1 python python-3.x

我知道和python中|or运算符有不同的含义和行为.例如:

>>> s1 = {1, 2, 3}
>>> s2 = {10, 20, 30}
>>> s1 or s2
{1, 2, 3}
>>> s1 | s2
{1, 2, 3, 20, 10, 30}
Run Code Online (Sandbox Code Playgroud)

但是,无论是运营商共享相同的__or____ror__魔术方法.为什么?

Mar*_*ers 5

因为or短路,所以没有魔术钩方法.这同样适用于and.

换句话说,__or__,__ror____ior__仅用于按位|.同样,__and__,__rand__,和__iand__仅用于按位&.