match-class-bind-self / R1905ΒΆ

Message emitted:

Use '%s() as %s' instead

Description:

Match class patterns are faster if the name binding happens for the whole pattern and any lookup for `__match_args__` can be avoided.

Problematic code:

class Book:
    __match_args__ = ("title", "year")

    def __init__(self, title, year):
        self.title = title
        self.year = year


def func(item: Book):
    match item:
        case Book(title=str(title)):  # [match-class-bind-self]
            ...
        case Book(year=int(year)):  # [match-class-bind-self]
            ...

Correct code:

class Book:
    __match_args__ = ("title", "year")

    def __init__(self, title, year):
        self.title = title
        self.year = year


def func(item: Book):
    match item:
        case Book(title=str() as title):
            ...
        case Book(year=int() as year):
            ...

Related links:

Created by the match_statements checker.