diff --git a/pymath/calculus/expression.py b/pymath/calculus/expression.py index 4879f1b..840f3af 100644 --- a/pymath/calculus/expression.py +++ b/pymath/calculus/expression.py @@ -107,16 +107,15 @@ class Expression(Explicable): """ return super(Expression, cls).tmp_render(render) - def __new__(cls, exp): + def __init__(self, exp): """Create Expression objects :param exp: the expression. It can be a string or a list of postfix tokens. """ - expression = object.__new__(cls) if isinstance(exp, str): - expression.postfix_tokens = str2tokens(exp) + pstf_tokens = str2tokens(exp) elif isinstance(exp, list): # Ici on ne peut convertir les "+-*/..." en opérateur que s'ils sont @@ -124,15 +123,18 @@ class Expression(Explicable): exp_mod_op = [ op.get_op(i) if op.can_be_operator(i) else i for i in exp ] - expression.postfix_tokens = flatten_list( - [tok.postfix_tokens if Expression.isExpression(tok) else tok for tok in exp_mod_op] + pstf_tokens = flatten_list( + [tok.postfix_tokens if Expression.isExpression(tok) + else tok + for tok in exp_mod_op + ] ) elif isinstance(exp, Expression): - return exp + pstf_tokens = exp.postfix_tokens elif isNumerand(exp): - expression.postfix_tokens = [exp] + pstf_tokens = [exp] else: raise ValueError( @@ -141,8 +143,9 @@ class Expression(Explicable): ) ) - expression._isExpression = 1 - return expression + super(Expression, self).__init__(pstf_tokens) + self.steal_history(exp) + self._isExpression = 1 def __str__(self): """ @@ -269,7 +272,7 @@ class Expression(Explicable): [< Expression [1, 2, +, 3, 4, *, 5, +, +, 6, 7, +, *]>, < Expression [3, 12, 5, +, +, 13, *]>] """ with Expression.tmp_render(): - tmp_steps = list(Explicable().merge_history(tokenList)) + tmp_steps = list(Explicable.merge_history(tokenList)) tmp_steps = list(tmp_steps)[:-1] steps = [Expression(s) for s in tmp_steps]