【发布时间】:2009-01-23 01:36:42
【问题描述】:
我尝试覆盖 __and__,但这是针对 & 运算符,而不是 and - 我想要的那个。我可以覆盖和吗?
【问题讨论】:
标签: python
我尝试覆盖 __and__,但这是针对 & 运算符,而不是 and - 我想要的那个。我可以覆盖和吗?
【问题讨论】:
标签: python
不,您不能覆盖 and 和 or。由于它们在 Python 中的行为(即短路),它们更像是控制流工具而不是运算符,并且覆盖它们更像是覆盖 if 而不是 + 或 -。
您可以通过覆盖 __nonzero__(或 Python 3 中的 __bool__)来影响对象的真值(即它们评估为真还是假)。
【讨论】:
__and2__ 函数只有在第一个参数的计算结果为真值时才会被调用。 a and b 将等同于 a.__and2__(b) if a else a。不像其他运算符函数那样常规,但该选择将强制保留短路并提供更好的性能。
您不能覆盖 and、or 和 not 布尔运算符。
【讨论】:
虽然您不能重载__and__,但您可以使用infix 来重载and。在这种情况下,您将使用 &and& 来表示 and 运算符。
【讨论】:
and 是 Python 中的关键字。)
不是真的。短路逻辑运算符没有特殊的方法名称。
【讨论】: