W programowaniu obiektowym istnieją definicje klasy oraz atrybuty instancji tej klasy która została stworzona na podstawie definicji. Instancje tej samej klasy nie współdzielą danych ale czy na pewno?

 

Załóżmy, że jesteśmy firmą produkującą samochody marki Mazda. W naszej fabryce z lini produkcyjnej wychodzą samochody różnego modelu, na te potrzeby tworzymy sobie klasę „samochód”:

 

class samochod:
    def __init__(self, model, kolor):
        self.model = model
        self.kolor = kolor

 

Dzięki temu możemy tworzyć sobie instancję nowych samochodów które wychodzą z linii produkcyjnej.

 

 

Natomiast chcielibyśmy też znać numer produkcyjny samochodu czyli numer kolejności zejścia z lini produkcyjnej który będzie przypisany kolejno przy tworzeniu nowej instancji samochodu.

 

Z pewnością pierwszą myślą mogłoby być stworzenie w programie zmiennej globalnej i przechowywanie tam tej wartości. Jest na to lepszy sposób i tu do gry wchodzi atrybut klasy, czyli atrybut definicji z której tworzymy naszej instancje kolejnych samochodów.

 

class samochod:

    nastepny_numer_produkcyjny = 1337

    def __init__(self, model, kolor):
        self.model = model
        self.kolor = kolor
        self.numer_produkcyjny = samochod.nastepny_numer_produkcyjny
        samochod.nastepny_numer_produkcyjny +=1

 

W tym wypadku nasz program zachowywałby się następująco:

 

 

Widzimy, że o ile przy tworzeniu nowego samochodu przypisujemy do niego sami model jak i kolor, tak bez przypisywania numeru produkcyjnego jest on zapisywany kolejne w kolejnych samochodach wychodzących z linii produkcyjnej numer 1337 oraz z następnym samochodem już 1338.

 

Podsumowując

 

Wiemy już, że tworząc nowe instancję obiektu (klasy) za pomocą def __init__ przypisujemy temu obiektowi specyficzne dla niego atrybuty. Tworząc kolejną instancję znów przypisujemy niezbędne dane.

 

Dziś nauczyliśmy się, że możemy też przechowywać dane dostępne dla wszystkich instancji stworzonych z konkretnej definicji klasy. Dzięki czemu możemy mieć lepszą kontrolę nad przechowywaniem danych i tak jak w powyższym przykładzie śledzić ilość stworzonych przez nas instancji danej klasy.

 

Jupyter oczywiście możecie znaleźć na naszym githubie

 

https://github.com/AnalitykEduPL/Python/blob/master/Atrybuty%20Klasy%20vs%20Atrybuty%20Instancji.ipynb