Python Glossary English

Python 3.10+astпонятие

ast.MatchClass

сопоставление с образцом

Образец класса case Point(x, y=0): cls — имя класса, patterns — позиционные образцы, kwd_attrs и kwd_patterns — именованные.

Синтаксис

ast.MatchClass(cls, patterns, kwd_attrs, kwd_patterns)

Выглядит как вызов, но конструктор не вызывается: проверяется isinstance, затем атрибуты. Позиционные образцы работают только при __match_args__ у класса (dataclass задаёт его сам), иначе — TypeError при сопоставлении. kwd_attrs — список строк, а не узлов. 'case int(n)' у встроенных типов захватывает сам объект.

Примеры

import ast
p = ast.parse('match o:\n    case Point(x, y=0): pass').body[0].cases[0].pattern
print(type(p).__name__, p.cls.id, len(p.patterns), p.kwd_attrs)  # → MatchClass Point 1 ['y']
class P:
    def __init__(self, x):
        self.x = x
try:
    match P(1):
        case P(v):
            pass
except TypeError as e:
    print(type(e).__name__)  # → TypeError

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности