在Python中过载插入符号运算符以进行字符串评估

时间:2017-11-22 21:00:57

标签: python operator-overloading eval

绕过当前问题的最简单方法是将插入符号运算符(^)解释为幂运算符,在Python中为**。我需要使用^的这个新定义来计算算术字符串,所以我使用eval()来完成此任务。我知道Python eval()的危险,但这段代码只能由我自己使用

为了完成操作符重载,我已经完成了:

class Pow(float):
    def __xor__(self, other):
        return self ** other

# Give a value for the variable and define using new Class Pow
A = Pow(2.4)

eval("A^3")

这很有用,但是对于在字符串中的功率之前或之后放置的任何操作员,例如:

eval("1+A^3")
eval("A^3+A")
etc...

结果:

unsupported operand type(s) for ^: 'float' and 'int'

或错误的答案。

如果所有权力条款都放在括号中,例如:

eval("1+(A^3)")
eval("(A^3)+A")

然后一切都很好,因为现在正在满足正确的Class语法。用**预先替换字符串中的^字符并不理想,所以我想知道是否有一种方法可以“更加强大”地使插入符号运算符重载算术评估,就好像它是传统的幂运算符一样。如果没有,是否有更好的方法来完成这项任务?

0 个答案:

没有答案