CodeGym /Kursy /Python SELF PL /Inicjalizacja obiektu

Inicjalizacja obiektu

Python SELF PL
Poziom 15 , Lekcja 4
Dostępny

4.1 Inicjalizacja

Zwykle tuż po utworzeniu obiekty nie są jeszcze gotowe do działania. Najpierw musisz przekazać do nich wszystkie niezbędne dane: parametry działania, wartości początkowe, odnośniki do innych obiektów itp.

Taki proces nazywa się inicjalizacją i powinien odbywać się tuż po utworzeniu obiektu.

Załóżmy, że masz klasę Kot (Cat) i chcesz nadać mu imię i wiek, co można zrobić na kilka sposobów:

Inicjalizacja atrybutów po utworzeniu obiektu

W tym przykładzie najpierw tworzony jest:

  • pusty obiekt Cat.
  • egzemplarz klasy Cat o nazwie barsik.
  • a następnie dla obiektu barsik ustawiane są dwa atrybuty: name i age dodawane bezpośrednio do obiektu.


class Cat:
    pass
        

# Utworzenie obiektu Cat
barsik = Cat()
        
# Inicjalizacja atrybutów po utworzeniu obiektu
barsik.name = "Barsik"
barsik.age = 5
        
print(f"Imię kota: {barsik.name}, wiek: {barsik.age}")  # Wyjście: Imię kota: Barsik, wiek: 5

Użycie metody do inicjalizacji atrybutów

W tym przykładzie do inicjalizacji atrybutów używana jest metoda initialize. Obiekt Cat tworzony jest bez żadnego atrybutu, a następnie metoda initialize() używana jest do ustawienia wartości atrybutów.


class Cat:
    def initialize(self, name, age):
        self.name = name
        self.age = age
        

# Utworzenie obiektu Cat
barsik = Cat()
        
# Inicjalizacja atrybutów przez metodę
barsik.initialize("Barsik", 5)
        
print(f"Imię kota: {barsik.name}, wiek: {barsik.age}")  # Wyjście: Imię kota: Barsik, wiek: 5

Użycie pól klasy

W tym przykładzie atrybuty name i age są zdefiniowane na poziomie klasy. Po utworzeniu obiektu barsik atrybuty są inicjalizowane bezpośrednio.


class Cat:
    name = ""
    age = 0
        

# Utworzenie obiektu Cat
barsik = Cat()
        
# Inicjalizacja atrybutów obiektu
barsik.name = "Barsik"
barsik.age = 5
        
print(f"Imię kota: {barsik.name}, wiek: {barsik.age}")  # Wyjście: Imię kota: Barsik, wiek: 5

Jaki sposób jest najlepszy? Żaden! Najlepiej używać konstruktora :)

4.2 Konstruktor

Konstruktor to specjalna metoda, która automatycznie wywoływana jest przy tworzeniu nowego obiektu klasy. Konstruktor stosowany jest do inicjalizacji pól obiektu i może wykonywać wszelkie początkowe działania potrzebne do skonfigurowania obiektu.

W Pythonie konstruktorem jest metoda o nazwie __init__. Oto podstawowe fakty na jego temat:

  • Metoda __init__ — to konstruktor w Pythonie. Jest wywoływana automatycznie, gdy tworzony jest nowy egzemplarz klasy.
  • __init__ przyjmuje co najmniej jeden parametr — self, który odnosi się do tworzonego obiektu. Dodatkowo mogą być przekazywane inne parametry do inicjalizacji atrybutów obiektu.
  • Wewnątrz metody __init__ można ustawiać początkowe wartości atrybutów obiektu, korzystając z self.
  • Konstruktor może wykonywać wszelkie działania potrzebne do skonfigurowania obiektu, na przykład weryfikację danych wejściowych lub ustanowienie połączeń z innymi obiektami.

Parametry przekazywane są konstruktorowi automatycznie, wystarczy, że wskażesz je wewnątrz nawiasów okrągłych podczas tworzenia obiektu.

Oto jak wygląda inicjalizacja naszego kota z użyciem konstruktora:


class Cat:
    def __init__(self, name, age):
        self.name = name
        self.age = age


# Utworzenie obiektu Cat z imieniem i wiekiem
barsik = Cat("Barsik", 5)

print(f"Imię kota: {barsik.name}, wiek: {barsik.age}")  # Wyjście: Imię kota: Barsik, wiek: 5

Po utworzeniu obiektu typu Cat automatycznie wywołana zostanie metoda __init__, i zostaną do niej przekazane trzy parametry:

  • Odnośnik do obiektu barsik w parametrze self
  • Łańcuch znaków „Barsik” w parametrze name
  • Liczba 5 w parametrze age

To jest wygodne i eleganckie.

Walidacja danych

W konstruktorze można także wykonywać walidację danych. W końcu celem konstruktora jest stworzenie poprawnego (prawidłowego) obiektu, z którym można dalej pracować. Przykład:


class Cat:
    def __init__(self, name, age):
        if age < 0: raise ValueError("Wiek nie może być ujemny")
        self.name = name
        self.age = age


# Utworzenie obiektu Cat z weryfikacją wieku
try:
    barsik = Cat("Barsik", -3)
except ValueError as e:
    print(e)  # Wyjście: Wiek nie może być ujemny
               
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION