Rozdział 14 · Tworzenie rzeczywistych obiektów

klasa czy nie? Projektowanie modeli

Nie każde zadanie wymaga klasy — a zły wybór nie jest od razu widoczny, lecz dopiero wtedy, gdy kod staje się trudniejszy do odczytania.

Nie każde zadanie wymaga zajęć

Po 24 rozdziałach o klasach łatwo dojść do wniosku, że klasą należy otaczać wszystko. To nie tak — klasa jest przydatna, gdy istnieje I stan, I zachowanie, które ma sens trzymać razem, i gdy będzie kilka obiektów tego rodzaju, z niezależną historią.

Zajęcia czy nie?
Trzeba zarówno przechowywać dane, jak i wykonywać na nich działania?
→ pewnie klasa
Czy będzie kilka niezależnych egzemplarzy w różnych stanach?
Czy to jednorazowe obliczenie bez stanu zapisanego?
→ Normalna funkcja
Dane bez zachowania, przeczytać raz?
→ dict / tuple / dataclass bez metod
Potrzebna weryfikacja przy zmianie wartości?
→ property (rozdział 14.11)
Debug Lab 14: klasa dla jednoobliczeniowego działania bez stanu
izlishnij_klass.py
class SredneeArifmeticheskoe:
    def __init__(self, chisla):
        self.chisla = chisla

    def vychislit(self):
        return sum(self.chisla) / len(self.chisla)

rezultat = SredneeArifmeticheskoe([4, 8, 15]).vychislit()
# Код работает правильно — ошибка не во время выполнения,
# а в самом ДИЗАЙНЕ: слишком много церемоний для одного вычисления
Co widać na ekranie

Technicznie rzecz biorąc, to działający kod, ale nie ma stanu rzeczywistego (obiekt jest tworzony i używany raz) ani wielu instancji — tylko obliczenia udawające klasę. Zwykła funkcja jest łatwiejsza do odczytania i testowania: srednee(chisla). Klasa jest uzasadniona, gdy obiekt żyje przez jakiś czas I zmienia stan jako Player z sekcji 14.9, nie gdy istnieje w jednej linii.

Poprawiony kod
prostaya_funkciya.py
def srednee_arifmeticheskoe(chisla):
    return sum(chisla) / len(chisla)

rezultat = srednee_arifmeticheskoe([4, 8, 15])
Znaki, że klasa należy do niej
Obiekt zmienia swój stan PO utworzeniu kilka razy (nie tylko wtedy, gdy __init__); w programie będzie jednocześnie więcej niż jeden taki obiekt; dane i działania na nich są logicznie powiązane w takim stopniu, że ich rozdzielanie jest niewygodne. Jeśli żadna z cech nie jest spełniona, zacznij od funkcji lub słownika, klasa ta zawsze może zostać dodana później, gdy będzie naprawdę potrzebna.
★★ Zadanie samodzielne
Funkcja czy klasa?

Dla każdego scenariusza zdecyduj, co jest bardziej odpowiednie — funkcja czy klasa, i uzasadnij: (1) konwersja temperatury z Celsjusza na Fahrenheita; (2) konto bankowe z saldem i historią operacji; (3) sprawdzenie, czy liczba jest pierwsza.

Praktyka: klasa czy nie klasa
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →