Mamy Naszą klasę i tutaj pojawia się pewna kwestia. Możemy bowiem na jej podstawie utworzyć obiekt i przypisać mu konkretne wartości do jego właściwości. Przykładowo mamy klasę Personi chcielibyśmy by miała ona imię i nazwisko. Tworzymy więc klasę z takimi właściwościami, a następnie konkretną osobę na jej podstawie i przypisujemy jej po utworzeniu takie konkretne imię i nazwisko. Na scenę wkroczy konstruktor, ale najpierw pogdajmy.
I tutaj mamy pewną niedogodność, bowiem musimy to robić ręcznie, każdorazowo po utworzeniu obiektu konkretnej osoby.

Jak widzimy możemy utworzyć obiekt i przypisać jego właściwości ręcznie. Moglibyśmy też przypisać je od razu w klasie. Jednak jaki to ma sens. Przypisanie właściwości od razu w klasie, spowoduje niechcianą sytuację. Mianowicie, że wszystkie obiekty utworzone na jej podstawie, będą miały te same właściwości. Tutaj jeśli tak zrobimy, każda osoba przykładowo będzie się nazywać John Doe. Co nie ma sensu.
Tutaj wchodzi na scenę pewna funkcja, a jak wiemy funkcje w klasach to metody. Zatem mamy tutaj pewną metodę na to. Nazywamy ją inicjalizatorem, a częściej konstruktorem. Tej drugiej nazwy będę używał. Konstruktor pozwoli Nam przypisać właściwości już w momencie tworzenia obiektu. Konstruktor jest metodą, którą uruchamiamy automatycznie przy tworzeniu obiektu. Ściślej mówiąc interpreter uruchamia konstruktor.
Konstruktor - metoda klasy
Mając konstruktor, który jest uruchamiany automatycznie, zmniejszamy ilość kodu. Nie musimy już bowiem każdej właściwości klasy uzupełniać ręcznie. Już po stworzeniu obiektu. Od teraz mamy sposób na stworzeniu już gotowego obiektu, w kształcie jaki chcemy. Odbywa się to po prostu poprzez podanie argumentów, 'do klasy'. Tak naprawdę podajemy wartości właściwości w nawiasach przy wywołaniu klasy, a tak naprawdę konstruktora. Pozwala to Nam na ustawienie od razu, początkowych wartości obiektu.

Powyżej możemy zauważyć, że w klasie definiujemy metodę o dziwnej nazwie. Dzięki tej nazwie, interpreter wie, że ma tą metodę wywołać automatycznie podczas tworzenia obiektu. Dzięki metodzie __init__ nie musimy także osobno definiować właściwości. Po prostu podajemy właściwości jako parametry konstruktora (inicjalizera). Następie w jego ciele, używamy słówka self i przypisujemy właściwością ich parametry podane podczas tworzenia obiektu.
Powyżej wspomniałem o specjalnym słowie kluczowym self, odwołuje się ono do aktualnie tworzonego obiektu. Jeśli nie byłoby tego słówka sytuacja byłaby zgoła inna. Każdy konstruktor odwoływałby się podczas tworzenia obiektu niejako 'do wszystkich obiektów jednocześnie' lub do całej klasy. Dzięki self możemy powiedzieć, że aktualnie podawane argumenty, mają być przypisane do aktualnie tworzonego obiektu.
Wyświetlanie właściwości i metody
I oczywiście w zastosowaniu tego konstruktora, tudzież inicjalizera, mamy po prostu 'wywołanie klasy' z argumentami. Czyli w skrócie właśnie wywołanie konstruktora, któremu podajemy wartości właściwości obiektu, jakie ma on mieć przy utworzeniu. Dzięki takiemu zabiegowi, nie musimy się powtarzać za każdym razem po utworzeniu obiektu. Nie trzeba pisać nazwy obiektu, później jego właściwości i wartości jaką chcemy mu nadać. Oszczędzamy sporo czasu i roboty. Zobaczmy sobie Naszą osobę.

Jak widzimy wyżej, wszystko jest elegancko, tak jak można się spodziewać. Jedyne do czego mogę się przyczepić, to że jeśli będę tworzył większą liczę obiektów. Będę musiał pisać ten komunikat o imieniu i nazwisku ręcznie za każdym razem. Można zamienić to po prostu w metodę, tak by można było na danym obiekcie po prostu ją wywołać.

Od razu lepiej, skoro konstruktor to jest metoda, to czemu nie zrobić właśnie więcej metod, czyli funkcji w klasie. Teraz nie musimy pisać tego długiego komunikatu za każdym razem ręcznie i się powtarzać. Nie popełnimy też literówki, bo każdy komunikat wyświetla za Nas funkcja. My napisaliśmy go tylko raz. Konstruktor dużo ułatwia i moim zdaniem upiększa, sprawia, że programowanie staje się trochę przyjemniejsze.
Konstuktor to zatem kolejny element, pozwalający Nam wejść głębiej w świat OOP. Na koniec pokażmy sobie, że nie jednym obiektem programista żyje.

Wykorzystałem dodatkowo listy i pętle for, bo czemu nie. Skoro możemy proces trochę ułatwić, a nie każdy obiekt tworzyć i pisać jego właściwości w osobnej linii. Zgrupujmy wszystko! Czyż to nie eleganckie?

[…] stworzonej już klasie Person, mamy jej właściwości, które definiujemy w konstruktorze. Pod konstruktorem natomiast, mamy Naszą pierwszą metodę. Ostatnio trochę wspomnieliśmy o […]