Налаштування позиційних аргументів у відповідності шаблону класу

Оновлено: 28.04.2023

When using a class name in a pattern, positional arguments in the pattern are not allowed by default, i.e. case MyClass(x, y) is typically invalid without special support in MyClass. To be able to use that kind of pattern, the class needs to define a __match_args__ attribute.

object.__match_args__ Цій змінній класу можна призначити кортеж рядків. Коли цей клас використовується в шаблоні класу з позиційними аргументами, кожен позиційний аргумент буде перетворено в аргумент ключового слова, використовуючи відповідне значення в __match_args__ як ключове слово. Відсутність цього атрибута еквівалентна встановленню для нього значення ().

Наприклад, якщо MyClass.__match_args__ є ("left", "center", "right"), це означає, що case MyClass(x, y) еквівалентний case MyClass (ліворуч=x, центр=y). Зверніть увагу, що кількість аргументів у шаблоні має бути меншою або дорівнювати кількості елементів у __match_args__; якщо він більший, спроба збігу шаблону викличе TypeError.