Rozdział 14 · Tworzenie rzeczywistych obiektów

__init__ i tworzenie obiektu

__init__ nie tworzy obiektu — konfiguruje obiekt, który już istnieje.

Co tak naprawdę się dzieje, gdy Sobaka("Рекс", 3)

Sobaka( „Rex”3)wezwanie klasowePython tworzynowa pusta...obiekt już istniejewywołuje się__init__(self,…self jest tym jedynymnowy obiekt__init__ustawia...self.klichka = ...gotowy przedmiotwróciłrex = ...
__init__ NIE tworzy obiektu — tworzy obiekt, który Python już stworzył
Częste nieporozumienie: „__init__ tworzy obiekt”
To nieprawda. W chwili wezwania __init__ obiekt już istnieje, w przeciwnym razie nie Python można go przekazać pierwszym argumentem (self)! Rola __init__ nie polega na stworzeniu obiektu, ale dostosować jego początkowy stan: nazwa byłaby bardziej uczciwa "inicjalizator" niż "konstruktor" – tak jest nazywana w dokumentacji Python.

Wartości domyślne w __init__

__init__ jest funkcją regularną (rozdział 13 dotyczy w całości): Parametry mogą mieć wartości domyślne:

init_s_umolchaniem.py
class Sobaka:
    def __init__(self, klichka, vozrast=1):
        self.klichka = klichka
        self.vozrast = vozrast

shchenok = Sobaka(„Bim”)             # vozrast = 1 domyślnie
rex = Sobaka(„Rex”, vozrast=3)      # wyraźnie określone

__init__ może wywoływać inne metody

init_vyzyvaet_metod.py
class Sobaka:
    def __init__(self, klichka, vozrast=1):
        self.klichka = klichka
        self.vozrast = vozrast
        self.privet()          # może być już wywołana wewnątrz __init__

    def privet(self):
        print(f"Nowy pies na scenie: {self.klichka}!")

rex = Sobaka(„Rex”)   # drukuje powitanie od razu po utworzeniu
Debug Lab 2: self.x = x zapisaliśmy po prostu jako x = x
poteryannyj_atribut.py
class Sobaka:
    def __init__(self, klichka, vozrast):
        klichka = klichka      # to po prostu lokalny zmienna!
        self.vozrast = vozrast

rex = Sobaka(„Rex”, 3)
print(rex.klichka)
Traceback (most recent call last):
  File "poteryannyj_atribut.py", line 7, in 
    print(rex.klichka)
AttributeError: 'Sobaka' object has no attribute 'klichka'
Co widać na ekranie

String klichka = klichka bez self. po lewej tworzy regularną zmienną LOKALNĄ wewnątrz __init__znika, gdy tylko __init__ końców — nigdy nie była przechowywana na obiekcie. Aby zachować wartość obiektu NA ZAWSZE, po lewej stronie = musi być obowiązkowo self.имя_атрибута.

Poprawiony kod
atribut_ispravlen.py
class Sobaka:
    def __init__(self, klichka, vozrast):
        self.klichka = klichka
        self.vozrast = vozrast

rex = Sobaka(„Rex”, 3)
print(rex.klichka)
Praktyka: __init__ i tworzenie obiektu
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →