我已经重载了一些Python操作符,包括算术和布尔操作符。Python的优先级规则仍然有效,这对于重载的操作符来说是不自然的,在表达式中会导致很多括号。是否有一种方法可以“重载”Python的优先级规则?
我已经重载了一些Python操作符,包括算术和布尔操作符。Python的优先级规则仍然有效,这对于重载的操作符来说是不自然的,在表达式中会导致很多括号。是否有一种方法可以“重载”Python的优先级规则?
你可以用以下方法欺骗这个机制:
_
函数)。例子:
>>> a = MyNumber(5); b = MyNumber(2); c = MyNumber(3)
>>> a + b * c
MyExpression([MyNumber(5), '+', MyNumber(2), '*', MyNumber(3)])
括号:
>>> a + _(b * c)
注意,_
是一个评估表达式的函数(按照你在其中执行的顺序)。
因此,如果您颠倒优先级,您将获得:
>>> _(a + b * c)
MyNumber(21)
提示:Django也使用Q
和F
运算符类似的技巧。