Сопоставление шаблонов в Python ошибка получения : вызываемый шаблон соответствия должен быть типом

#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)   ")"  

Однако, используя этот подход, я получаю ошибку: вызываемый шаблон соответствия должен быть типом. Что я делаю не так?