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

时间:2015-09-27 10:08:06

标签: python operator-overloading unary-operator

我尝试定义一个类并覆盖代字号运算符:

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之类的操作而不会引发语法错误。

1 个答案:

答案 0 :(得分:11)

不,你不能这样做,而不是从根本上改变Python编译字节码的方式。所有表达式首先解析到一个抽象语法树中,然后从中编译成字节码,并且它处于解析阶段,操作数和运算符被分组。

当字节码运行时,您不能再决定接受两个操作数。