Názor k článku Nejdůležitější novinka v Pythonu 3.10: strukturální pattern matching od ebik - Ten pattern matching na třídu bude občas docela...

  • Článek je starý, nové názory již nelze přidávat.
  • 31. 8. 2022 13:07

    ebik

    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.__mat­ch_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.