[Python-ideas] [Python-ideos] Dedicated overloadable boolean operators

Brendan Barnwell brenbarn at brenbarn.net
Tue Nov 24 13:12:43 EST 2015


On 2015-11-23 22:34, Random832 wrote:
> On 2015-11-24, Chris Angelico<rosuav at gmail.com>  wrote:
>> >I think it's reasonable, except for the potential confusion of having
>> >*three*  "and" operators. The one with the word is never going to
>> >change - its semantics demand that it not be overridable.
> How? Are you referring to the short-circuit? C# allows
> overloading the short-circuit operators by doing it in two
> parts - in pseudocode:
>
> a and b: a if a.__false__() else a & b
> a or b: a if a.__true__() else a | b
>
> There's no fundamental reason short-circuiting "demands" that it
> not be overridable, just because C++ can't do it.

	The problem is that this kind of overriding doesn't handle the main use
case, which is elementwise and-ing/or-ing.  If a is some numpy-like
array of [1, 1], then it may be boolean true, but you still want "a
magic_or b" to do the elementwise operation, not just return "a" by
itself.  (I say "numpy-like" because a real numpy array will fail here
precisely because its boolean truth value is undefined, so it raises an
error.)

	The problem is that, with the existing and/or, the issue of the boolean
truth values of the operands is entangled with the actual and/or
operation.  For an elementwise operation, you *always* want to do it
elementwise, regardless of whether the operands "count" as boolean false
in some other situation.

-- 
Brendan Barnwell
"Do not follow where the path may lead.  Go, instead, where there is no 
path, and leave a trail."
    --author unknown


More information about the Python-ideas mailing list