是否有可能在 Python 中用二元运算符覆盖一元运算符?

Is there a possibility to override a unary operator with a binary one in Python?

我试图定义一个 class 并覆盖波浪号运算符:

class foo:
    def __invert__(self, other)
        return 1232 # a random number , just as test

然后这样称呼它:

>>> f = foo()
>>> g = foo()
>>> f ~ g
  File "<input>", line 1
    f ~ g
      ^
SyntaxError: invalid syntax

我们能否将波浪号运算符替换为二进制运算符,以便我们可以在不引发语法错误的情况下执行类似 f ~ g 的操作。

不,你不能这样做,除非从根本上改变 Python 编译字节码的方式。所有表达式首先解析到抽象语法树中,然后从中编译成字节码,并且在解析阶段对操作数和运算符进行分组。

到字节码运行时,您无法再决定接受两个操作数。