HTML CSS PYTHON
reklama
Klasa a obiekt w Pythonie
W Pythonie klasa to coś abstrakcyjnego, to przepis na coś. Np. placek w cukiernii składa się z cukru, proszku do pieczenia, mąki. Nic konkretnego.
Obiekt to już konkretny element klasy. To np. w cukiernii makowiec czy sernik.

Podsumowując klasa to trochę jakby przepis, a obiekt to gotowe danie. Klasa w swojej instrukcji określa, co obiekt powinien zawierać i jak powinien się zachowywać. Żeby skorzystać z klasy, należy stworzyć jej instancję, czyli utworzyć jej obiekt. A zatem obiekt utworzony w obrębie danej klasy nazywany jest jej instancją, a proces jego tworzenia – instancjonowaniem.

A zatem INSTANCJA KLASY - to tworzenie obiektu danej klasy.

Tworzenie klasy w Pythonie rozpoczynamy od słowa kluczowego class, następnie podajemy nazwę klasy, z reguły pisaną z dużej litery, nie używamy spacji ani znaków podkreślenia. Duża litera w nazwach klas pomaga odróżnić klasy od nazw zmiennych czy nazw funkcji.

class Klasa:
x=5

W przykładzie powyżej utworzyliśmy klasę o nazwie Klasa i nadaliśmy jej właściwość o nazwie x.
Nazwy klas są dowolne i w poprawnym kodzie pisane z dużej litery. Chociaż w przyszłości zauważymy, że w wbudowanych modułach Pythona nazwy klas są z reguły pisane z małych liter. Np. wbudowany w Pythona moduł datetime posiada kilka klas o nazwach: class date, class time, class datetime, class timedelta, class tzinfo, class timezone.

Teraz utworzymy obiekt, używając klasy:

Przykład
class Klasa:
x=5
y=4
 
obiekt = Klasa()
print(obiekt.x)
5
Utworzyliśmy obiekt o nazwie 'obiekt' i wydrukowaliśmy wartość zmiennej x.
Tworzenie obiektu w klasie
Jak w przykładzie wyżej, żeby przy użyciu klasy stworzyć obiekt, używamy nazwy tej klasy oraz nawiasu.
Przykład
class Klasa:
    pass
 
obiekt=Klasa()
 
Słowo pass wskazuje, że w tej klasie nie ma nic, żadnej instrukcji, jest pusta.
Atrybuty obiektów
Obiekty mogą mieć przypisane do siebie atrybuty tj. zmienne oraz funkcje:

zmienne to określone wartości przypisane do obiektu. Taka wartość dotyczyć będzie wyłącznie tego jednego obiektu. Aby odnieść się do zmiennej w obiekcie, musimy wskazać zarówno obiekt, jak i zmienną. Nazwy obiektu i zmiennej oddzielamy kropką.
Taka składnia posłuży nam zarówno do przypisania wartości do zmiennej jak i do jej pobrania:
Przykład
class Klasa:
    pass
 
obiekt=Klasa()
obiekt.name="Krzys"   #przypisanie do obiektu zmiennej 'name' o wartości "Krzys"
 
print(obiekt.name)    #pobranie wartości
Krzys   #wynik
 
funkcje to blok kodu, który działa tylko wtedy, gdy jest wywoływany. Wszystkie funkcje należące do klasy nazywane są metodami.
Jeśli funkcja nie należy do klasy, a tym samym do żadnego modułu, wówczas pozostaje funkcją.
Metody w klasach przyjmują jako pierwszy parametr obiekt, na rzecz którego są wywoływane. Parametr ten często ma nazwę self, ale ponieważ ten parametr wskazuje na obiekt, może mieć dowolną nazwę.
Gdy wywołujemy metodę, zaczynamy od nazwy obiektu, następnie stawiamy kropkę, nazwę metody i nawias z argumentami.

Przykład
class Klasa:
    def funkcja(self,a,b):
        print("nazywam się " + a + b)
 
 
x=Klasa()
print(x.funkcja("Jan ","Nowak"))
nazywam się Jan Nowak
None
Atrybuty klasy
Przypomnijmy, atrybut klasy to dowolna zmienna lub funkcja powiązana z tą klasą. Wówczas te zmienne i funkcje są współdzielone przez wszystkie obiekty klasy.

Przykład
class Klasa:
    x=1                       #atrybut klasy
    y="Jola"                  #atrybut klasy
    def metoda(self):
        print(Klasa.x)        #odwołanie do atrybutu klasy
    def metoda2(self):
        print(Klasa.y)        #odwołanie do atrybutu klasy
 
 
print(Klasa.x)
1
print(Klasa.y)
Jola
z=Klasa()
print(z.metoda())
1
None
print(z.metoda2())
Jola
None
Jak widać w przykładzie powyżej, możemy stworzyć zmienną, która nie będzie dotyczyła obiektu, tylko klasy, czyli ta zmienna może być wykorzystywana przez wszystkie obiekty tej klasy.
Żeby utworzyć zmienną klasy, wystarczy ją zdefiniować w ciele tej klasy. By odnieść się do niej, używamy najpierw nazwy klasy, następnie kropki i wreszcie nazwy tej zmiennej. Nie ma więc potrzeby tworzenia żadnych obiektów.

Ale można również zapytać obiekt o tą zmienną w ciele klasy. I również uzyskamy poprawną odpowiedź, oczywiście, jeśli nazwa obiektu i zmiennej nie będzie jednakowa.
Przykład
class Klasa:
    y="Jola"
 
 
print(Klasa.y)
Jola   #wynik
Przykład
class Klasa:
    name="Jola"
    def metoda(self, name1, name2):
        self.name1=name1
        self.name2=name2
 
 
print(Klasa.name)
Jola
obiekt=Klasa()       //tworzymy obiekt klasy Klasa
print(obiekt.name)   //wywołujemy zmienną klasy Klasa
Jola
print(obiekt.metoda("Jola", "Pauli"))   //wywołujemy metodę klasy
None
print(obiekt.name1)                     //wywołujemy pierwszą zmienną metody
Jola
print(obiekt.name2)                     //wywołujemy drugą zmienną metody
Pauli
Jeśli mamy zdefiniowane atrybuty o tej samej nazwie w klasie i w obiekcie, to w pierwszej kolejności odczytywane będą te z obiektu, a gdy ich nie ma to z klasy. Gdy po obiekcie określamy nazwę zmiennej i używamy znaku przypisania, to ustawiamy wartość zmiennej obiektu, a nie klasy.
Zmienne klasy często wykorzystywane są do przechowywania określonej wartości, która nie powinna ulegać zmianom, np. podatek Vat 23%.
Konstruktor i inicjalizator
Gdy tworzymy nowy obiekt w klasie, używamy nazwy tej klasy oraz ustawiamy nawias za nazwą klasy. Ten nawias to wywołanie funkcji - specjalnej metody tworzącej obiekt, zwanej konstruktorem. Metoda ta przechodzi przez szereg kroków, niezbędnych do utworzenia obiektu, w tym między innymi woła specjalną metodę o nazwie __init__() z naszej klasy.
Ta metoda zwana jest inicjalizatorem.
W ciele metody _init_() określamy, co powinno się dziać w czasie tworzenia obiektu. Najczęściej definiujemy w niej atrybuty obiektu, czyli przypisane do obiektu zmienne lub funkcje.
A zatem wszystkie klasy w Pythonie zawierają metodę __init__().
Metoda __init__() to specjalna metoda (konstruktor), która jest wywoływana automatycznie, gdy klasa jest używana do tworzenia nowego obiektu.

Metoda _init_() wywoływana jest jako pierwsza podczas inicjacji nowego obiektu. Służy do ustawienia różnych wartości i przygotowania danego obiektu do naszych celów. Od nas zależy co umieścimy w __init__() i czy w ogóle tę metodę zdefiniujemy, ponieważ wstawianie parametrów do __init__() jest opcjonalne.

Liczba parametrów w metodzie __init__() określa, ile argumentów powinno się znaleźć w wywołaniu konstruktora (czyli nawiasie, który stawiamy za nazwą klasy, gdy tworzymy obiekt). Jeśli więc w metodzie __init__ dodamy parametr name, to przy tworzeniu obiektu nie możemy już zostawić pustego nawiasu. Powinniśmy podać tam argument, który posłuży jako imię.
Przykład
class Klasa:
    def __init__(self, x, y):
        self.x=x
        self.y=y
 
 
obiekt = Klasa(2,3)
print(obiekt.x + obiekt.y)
5   #wynik
W przykładzie pojawiło się słowo kluczowe self, które jest taką 'zmienną globalną' i staje się widoczne w każdej metodzie klasy (jeśli zostanie zdefiniowana).
Słowo self jest pierwszym parametrem każdej metody w klasie.
W języku Python metody w klasach przyjmują jako pierwszy parametr obiekt, na rzecz którego są wywoływane. Zatem słowo self wskazuje na obiekt

Nie trzeba używać nazwy 'self', można ją nazwać jak się chce, ale musi to być pierwszy parametr dowolnej metody w klasie, który wskazuje na obiekt, na rzecz którego metoda jest wywoływana.
Możemy użyć konstruktora bezargumentowego:
Przykład
class Klasa:
    def __init__(self):
        print("Witaj")
 
 
obiekt=Klasa()
Witaj   #wynik
W przykładzie widzimy, że zaraz po inicjalizacji obiektu, wykonywana jest metoda __init__.
Nie musieliśmy nic więcej robić tylko utworzyć nowy obiekt: obiekt = Klasa(). Po inicjalizacji obiektu metoda __init__ wywołała się sama.
W powyższym przykładzie użyliśmy konstruktora bezargumentowego, nazywa on się tak ponieważ, poza niezbędnym self nie wymagamy innych parametrów przy użyciu metody __init__ czyli: def __init__(self).

Przypomnijmy, że parametr to coś co dajemy przy deklaracji funkcji (np. def funkcja(x,y)) a argument to coś co dodajemy przy wywołaniu funkcji (np. funkcja(2, 3)).
Wstawmy parametry do metody __init__ (y,z) a następnie przypiszmy je do obiektu x, co sprawi, że wszystkie metody w klasie będą miały do obiektu dostęp.

Przypominijmy, że w języku Python metody przyjmują jako pierwszy parametr obiekt, na rzecz którego te metody są wywoływane.!!!!
Przykład
class Klasa:
    def __init__(x,y,z):
        x.y=y
        x.z=z
    def funkcja(s):
        print(s.y + s.z)
 
 
obiekt=Klasa(4,5)
obiekt.funkcja()
9    #wynik
obiekt.z
5    #wynik
obiekt.y
4    #wynik
reklama
reklama
Szkoła bananik.pl jest zoptymalizowana pod kątem uczenia się, testowania i szkolenia.
Przykłady są stale sprawdzane, aby uniknąć błędów, ale nie możemy zagwarantować pełnej poprawności wszystkich treści.
Korzystając z tej witryny, wyrażasz zgodę na przeczytanie i zaakceptowanie naszych warunków użytkowania, plików cookie i polityki prywatności.
© 2022 bananik.pl
Ta strona używa ciasteczek (cookies), dzięki którym nasz serwis może działać lepiej.Rozumiem