绕过当前问题的最简单方法是将插入符号运算符(^)解释为幂运算符,在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语法。用**预先替换字符串中的^字符并不理想,所以我想知道是否有一种方法可以“更加强大”地使插入符号运算符重载算术评估,就好像它是传统的幂运算符一样。如果没有,是否有更好的方法来完成这项任务?