Я это понимаю. Проблема в том, что на момент разбора выражения “x+y” я не знаю значений x и y.
Класс Tree (частично) выглядит так:
# Абстрактный базовый класс значения выражения
class TNode:
@abstractmethod
def value(self):
raise NotImplementedError('Method TNode.value is pure virtual')
# Класс, реализующий дерево разбора арифметических выражений
class TTree:
def __init__(self, *args):
if len(args) == 0:
self.node = TRealNode(0)
elif len(args) == 1:
self.node = TRealNode(args)
elif len(args) == 2:
self.node = TUnaryNode(args, args)
elif len(args) == 3:
self.node = TBinaryNode(args, args, args)
def value(self):
return self.node.value()
# Вещественная переменная
class TRealNode(TNode):
def __init__(self, val):
self.__val__ = val
def value(self):
return self.__val__
Так вот, когда обрабатывается выражение “x+y”, то строится переменная вида: exp = Tree(Tree(x),'+',Tree(y)), где первоначально x и y имеют, например, нулевые значения. Для их обработки будут построены экземпляры класса TRealNode, Как мне поменять в них значения ума не приложу

В С++ я бы сделал еще один конструктор, принимающий указатель на число. А как тут быть?