I think that before adding more ad hoc binary operators, we ought to
consider the possibility of custom operators.
That actually sounds like the most sensible solution so far, altough the scope of such a change is also much larger. But custom operators really would be a cool addition to Python.

Although possibly we might choose another pseudo-namespace, to avoid
custom operators clashing with dunders. Trunders perhaps? (Triple
underscores?)

Under this scheme, your operators would become:

     ~or
     ~and
     ~xor

and call trunders ___or___ etc.
As Dan already pointed out it's very hard to see the difference between two and three underscores so I don't think "trunders" would be a good idea.

I think it would make sense to instead use a new keyword to define operators. Maybe something like "defop". I don't think that's a very common variable or function name.
Example syntax could be:

class MyInt(int):
    defop combine(self, other):
        return self, other

# and now we can use it
x combine y

# which is equivalent to
x.combine(y)

Of course it would actually have to check if and where the operator is defined like currently done for overloading.

Also it might be worth considering support for pre/postfix operators, maybe either with a differnt keyword (something like defpre/defprefix, don't really like those but something similar maybe) or a symbol as indicator (e.g. "defop <combine(..)" for prefix and "defop >combine(..)" for postifx).

_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to