Przejdź do treści
Wróć do kursuProgramowanie / Lekcja 7 z 8

Lekcja 7 / obiekty

Klasy i obiekty: gdy dane i zachowanie mają być razem

Słownik jest dobry na start, ale gdy dane i funkcje zaczynają chodzić parami, klasa pomaga trzymać je razem.

Sytuacja z pracy

Masz lekcję z tytułem i statusem ukończenia. Chcesz oznaczać ją jako ukończoną i pytać o czytelny status. Słownik plus osobna funkcja działa, ale przy większej liczbie lekcji robi się niewygodnie.

Najpierw wersja ze słownikiem

lesson = {
    "title": "Zmienne",
    "completed": False
}

def mark_completed(lesson):
    lesson["completed"] = True

mark_completed(lesson)
print(lesson)

Problem

Dane lekcji są w jednym miejscu, a zachowanie w osobnej funkcji. Da się tak żyć, ale przy większym programie łatwo pogubić, które funkcje pasują do których danych. Klasa pozwala opisać własny typ rzeczy: na przykład lekcję.

Kod: klasa Lesson

class Lesson:
    def __init__(self, title):
        self.title = title
        self.completed = False

    def mark_completed(self):
        self.completed = True

    def status_text(self):
        if self.completed:
            return self.title + " - ukończona"
        return self.title + " - do zrobienia"


lesson = Lesson("Zmienne")
print(lesson.status_text())

lesson.mark_completed()
print(lesson.status_text())

Wynik

Zmienne - do zrobienia
Zmienne - ukończona

Jak to czytać?

class
Przepis na obiekt, np. lekcję.
object
Konkretny egzemplarz klasy, np. lekcja „Zmienne”.
self.title
Dane należące do konkretnego obiektu.
method
Funkcja należąca do klasy, np. mark_completed.

Mini-zadanie

Utwórz drugi obiekt: Lesson("Warunki") i wypisz jego status.

Ćwiczenie praktyczne

Dodaj do klasy atrybut duration_minutes. Ustaw go w __init__ i dopisz metodę, która zwraca tekst z tytułem oraz czasem trwania.

Quiz

Czym jest klasa?

Przepisem na obiekty danego typu.

Czym jest obiekt?

Konkretnym egzemplarzem klasy.

Po co jest self?

Żeby metoda mogła pracować na danych konkretnego obiektu.

Co dalej?

W finale połączysz klasy Lesson i Course w mały tracker postępu.

Lekcja 7: Klasy i obiekty: gdy dane i zachowanie mają być razem | Python od podstaw | Mikołaj Mikołajczak