История изменений
Исправление mazdai, (текущая версия) :
В чем проблема? Делаем метод для сравнения с объектом, инициализированным по умолчанию (или «перегружаем» .eq( в методах класса (при помощи hasattr( или другим образом, не рекомендуется)), получаем на выходе сахар для кода наподобие:
[code=python]
patterns = (
(Node(children=[...]), callback_1),
(Node(children=[...]), callback_2),
...)
<…>.match(src = patterns)
class Asdf: def match(self, src):
...
return patterns[
tuple(p[0] == self for p in src).index(True)]
[/code]
парсер сломался
но суть в том что не нужно писать бойлерплейт, костыльные функции сравнения и уж тем более ломать встроенные методы
Исходная версия mazdai, :
В чем проблема? Делаем метод для сравнения с объектом, инициализированным по умолчанию (или «перегружаем» .eq( в методах класса (при помощи hasattr( или другим образом, не рекомендуется)), получаем на выходе сахар для кода наподобие:
[code=python]
patterns = (
(Node(children=[...]), callback_1),
(Node(children=[...]), callback_2),
...)
<…>.match(src = patterns)
class Asdf: def match(self, src):
...
return patterns[
tuple(p[0] == self for p in src).index(True)]
[/code]