#python #pattern-matching
#питон #сопоставление с образцом
Вопрос:
Я определил следующие классы:
@dataclass class Var: name: str @dataclass class Val: value: int @dataclass class Op: operation: str left: 'Node' right: 'Node'
и создал тип объединения этих 3
Node = Var | Val | Op
Теперь я хочу проверить, используя соответствие структурному шаблону в следующих случаях:
match node: case Var(x): return x case Val(i): return str(i) case Op(operation, (left), (right)): return "(" node_to_str(left) " " operation " " node_to_str(right) ")"
Проблема в том, что в последнем случае левого и правого не может быть, что приводит меня к ошибке. Следовательно, я хотел бы наложить ограничение слева и справа на то, что они должны быть типом узла:
case Op(operation, Node(left), Node(right)): return "(" node_to_str(left) " " operation " " node_to_str(right) ")"
Однако, используя этот подход, я получаю ошибку: вызываемый шаблон соответствия должен быть типом. Что я делаю не так?