0Pricing
Python Academy · Lekcja

Wzorce klas

Dopasowuj wzorce do atrybutów obiektów

Wzorce klas to bezpłatna lekcja Python Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Python Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Python Academy zawiera 4 lekcji w sumie.

Dopasowywanie obiektów

Wzorce klas pozwalają instrukcji match sprawdzić typ obiektu i jednocześnie wyodrębnić jego atrybuty. Wyglądają jak wywołanie konstruktora umieszczone wewnątrz przypadku.

Sprawdzanie wyłącznie typu

Wzorzec klasy z pustymi nawiasami pasuje do każdej instancji tej klasy.

def kind(value):
    match value:
        case int():
            return 'an integer'
        case str():
            return 'a string'
        case _:
            return 'something else'

print(kind(5))
print(kind('hi'))
print(kind([1]))

Przechwytywanie atrybutów po nazwie

W nawiasach należy zapisać attr=name, aby dopasować instancje i przypisać nazwany atrybut do zmiennej.

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

p = Point(3, 4)

match p:
    case Point(x=px, y=py):
        print('point at', px, py)

Dopasowywanie konkretnych wartości atrybutów

Można wymagać, aby atrybut był równy literałowi. Ten przypadek pasuje wyłącznie do punktów leżących na osi x.

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

def describe(p):
    match p:
        case Point(x=0, y=0):
            return 'origin'
        case Point(x=x, y=0):
            return 'on x-axis at ' + str(x)
        case Point():
            return 'elsewhere'

print(describe(Point(0, 0)))
print(describe(Point(5, 0)))
print(describe(Point(1, 1)))

Wzorce pozycyjne z __match_args__

Jeśli klasa definiuje __match_args__, można dopasowywać atrybuty pozycyjnie. Dataclasses ustawiają tę wartość automatycznie na podstawie kolejności pól.

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

p = Point(3, 4)

match p:
    case Point(px, py):
        print(px, py)

Ręczne definiowanie __match_args__

W zwykłej klasie należy ustawić __match_args__ na krotkę zawierającą nazwy atrybutów, które mają być dostępne pozycyjnie.

class Point:
    __match_args__ = ('x', 'y')
    def __init__(self, x, y):
        self.x = x
        self.y = y

match Point(1, 2):
    case Point(a, b):
        print(a, b)

Rozdzielanie działania według klasy

Wzorce klas pozwalają przejrzyście rozdzielać działanie programu dla rodziny powiązanych typów, z których każdy jest obsługiwany przez własny przypadek.

from dataclasses import dataclass

@dataclass
class Circle:
    radius: float

@dataclass
class Square:
    side: float

def area(shape):
    match shape:
        case Circle(radius=r):
            return 3.14159 * r * r
        case Square(side=s):
            return s * s

print(area(Circle(2)))
print(area(Square(3)))

Zagnieżdżanie wzorców klas

Wzorce klas można zagnieżdżać. Pole będące obiektem może zostać dopasowane za pomocą kolejnego wzorca klasy.

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

@dataclass
class Line:
    start: Point
    end: Point

line = Line(Point(0, 0), Point(3, 4))

match line:
    case Line(start=Point(x=0, y=0), end=Point(x=ex, y=ey)):
        print('from origin to', ex, ey)

Łączenie z typami wbudowanymi

Typy wbudowane obsługują jeden argument pozycyjny, który przechwytuje wartość. int(n) dopasowuje wartość typu int i przypisuje ją do n.

def label(value):
    match value:
        case int(n):
            return 'int ' + str(n)
        case str(s):
            return 'str ' + s
        case _:
            return 'other'

print(label(7))
print(label('hi'))

Kiedy używać wzorców klas

Po wzorce klas warto sięgać podczas pracy z obiektami, których typ i wartości atrybutów wpływają na działanie programu, na przykład z obiektami zdarzeń, węzłami AST lub hierarchiami kształtów. Zastępują one rozwlekłe sprawdzanie isinstance połączone z dostępem do atrybutów.

Łączenie wzorców pozycyjnych i nazwanych

W jednym wzorcu klasy można łączyć podwzorce pozycyjne i nazwane, podobnie jak w wywołaniu funkcji. Wzorce pozycyjne korzystają z kolejności w __match_args__, a wzorce nazwane jawnie wskazują atrybut.

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int
    z: int

p = Point(1, 2, 3)

match p:
    case Point(x, y, z=depth):
        print(x, y, depth)

Szybkie sprawdzenie

Do czego pasuje wzorzec Point(x=0, y=y)?

Podsumowanie

Nauczyli się Państwo dopasowywać obiekty na podstawie ich atrybutów.

  • ClassName() sprawdza typ.
  • attr=name przypisuje atrybuty do nazw, a literały wymagają dokładnych wartości.
  • __match_args__ umożliwia dopasowywanie pozycyjne.
  • Wzorce klas można zagnieżdżać i wykorzystywać do rozdzielania działania w hierarchiach typów.

Często zadawane pytania

Czy lekcja „Wzorce klas” jest bezpłatna?

Tak — pełny tekst „Wzorce klas” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Python Academy, przejdź na CoddyKit PRO. Kurs Python Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Wzorce klas”?

Dopasowuj wzorce do atrybutów obiektów Ćwiczysz Python Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Python Academy?

Nie wymagamy żadnego doświadczenia. Python Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Wzorce klas”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Python Academy?

Tak. Każda lekcja Python Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Podstawy match i case
  2. Dopasowywanie sekwencji i mapowań
  3. Wzorce klas
  4. Strażnicy i symbole wieloznaczne
← Powrót do Python Academy