Ten pattern matching na třídu bude občas docela peklo, protoze vubec nebere ohled na argumenty metody __init__, jak by se na prvni pohled zdalo.
Specifikace je tady: https://peps.python.org/pep-0634/#class-patterns
class Foo:
def __init__(self, x, y=0, z=0):
self.a = x
self.b = y
self.c = z
match subject:
case Foo() - matchuje pomoci isinstance(x, Foo)
case Foo(a=1, b=2) - navic testuje zda subject.a == 1 a subject.b==2
case Foo(1, a=1, b=2) - Nejprve se zase provede isinstance(x, Foo), pak se pomoci subject.__match_args__ se zjisti jmeno atriburtu pro prvni argument a pak se zkontrolujou hodnoty atributu stejne jako v prechozim pripade. Pro built-in typy (viz vycet v dokumentaci) se to samozrejme chova jinak.
To ale znamena, ze vyraz Foo(x, y=z) uvnitr 'case' znamena (semanticky) neco uplne jineho, nez ve zbytku kodu. Nejsem si jisty, jestli se mi to libi.