是否有可能在 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 编译字节码的方式。所有表达式首先解析到抽象语法树中,然后从中编译成字节码,并且在解析阶段对操作数和运算符进行分组。
到字节码运行时,您无法再决定接受两个操作数。
我试图定义一个 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 编译字节码的方式。所有表达式首先解析到抽象语法树中,然后从中编译成字节码,并且在解析阶段对操作数和运算符进行分组。
到字节码运行时,您无法再决定接受两个操作数。