Klasy i obiekty Pythona - programowanie obiektowe



Ten blog na temat „Python Class” dotyczy podstaw klas, atrybutów i różnych koncepcji OOPS, takich jak dziedziczenie, polimorfizm i hermetyzacja.

Po tym, jak Stack Overflow przewidział, że do 2019 r.Python wyprzedzi inne języki pod względem aktywnych programistów, popyt na tylko rośnie.Python kieruje się paradygmatem programowania obiektowego. Zajmuje się deklarowaniem klas Pythona, tworzeniem z nich obiektów i interakcją z użytkownikami. W języku zorientowanym obiektowo program jest podzielony na samodzielne obiekty lub można powiedzieć, że na kilka miniprogramów. Każdy obiekt reprezentuje inną część aplikacji, która może się między sobą komunikować.
Na tym blogu poświęconym klasom w języku Python poznasz każdy aspekt klas i obiektów w następującej kolejności:

Zacznijmy.:-)





Co to jest klasa Pythona?

Klasa w Pythonie to plan, z którego tworzone są określone obiekty. Pozwala ustrukturyzować oprogramowanie w określony sposób. Tutaj pojawia się pytanie, jak? Klasy pozwalają nam logicznie grupować nasze dane i funkcje w taki sposób, aby można je było łatwo ponownie wykorzystać i aby w razie potrzeby można było na nich budować. Rozważ poniższy obrazek.

ClassesAndObjects - klasa Pythona - EdurekaNa pierwszym obrazku (A) przedstawia projekt domu, który można uznać za Klasa . Korzystając z tego samego planu, możemy stworzyć kilka domów, a te można uznać za Obiekty . Używając klasy, możesz nadać swoim programom spójność, aby można było ich używać w bardziej przejrzysty i efektywny sposób. Atrybuty to elementy składowe danych (zmienne klas i zmienne instancji) oraz metody, do których dostęp uzyskuje się za pomocą notacji kropkowej.



  • Zmienna klasy jest zmienną, która jest wspólna dla wszystkich różnych obiektów / instancji klasy.
  • Zmienne instancji to zmienne, które są unikalne dla każdej instancji. Jest zdefiniowany wewnątrz metody i należy tylko do bieżącego wystąpienia klasy.
  • Metody nazywane są również funkcjami zdefiniowanymi w klasie i opisującymi zachowanie obiektu.

Przejdźmy teraz do przodu i zobaczmy, jak to działa w PyCharm. Aby rozpocząć, najpierw przyjrzyj się składni klasy Pythona.

Składnia :

klasa nazwa_klasy: instrukcja-1. . instrukcja-N

Tutaj ' klasa' Instrukcja tworzy nową definicję klasy. Nazwa klasy następuje bezpośrednio po słowie kluczowym „ klasa' w pythonie, po którym następuje dwukropek. Aby utworzyć klasę w Pythonie, rozważ poniższy przykład:



klasa pracownik: zaliczenie # brak atrybutów i metod emp_1 = pracownik () emp_2 = pracownik () # zmienna instancji może być utworzona ręcznie emp_1.first = 'aayushi' emp_1.last = 'Johari' emp_1.email='aayushi@edureka.co 'emp_1.pay = 10000 emp_2.first =' test 'emp_2.last =' abc 'emp_2.email='test@company.com' emp_2.pay = 10000 print (emp_1.email) print (emp_2.email)

Wynik -

aayushi@edureka.co test@company.com

A co, jeśli nie chcemy ręcznie ustawiać tych zmiennych. Zobaczysz dużo kodu, a także jest on podatny na błędy. Aby uczynić to automatycznie, możemy użyć metody „init”. W tym celu przyjrzyjmy się, czym dokładnie są metody i atrybuty w klasie Pythona.

Metody i atrybuty w klasie Pythona

Teraz tworzenie klasy jest niekompletne bez pewnych funkcji. Funkcjonalności można więc definiować, ustawiając różne atrybuty, które działają jako kontener dla danych i funkcji związanych z tymi atrybutami. Funkcje w Pythonie są również nazywane jako Metody . Mówiąc o w tym metoda , jest to specjalna funkcja, która jest wywoływana za każdym razem, gdy tworzony jest nowy obiekt tej klasy. Możesz myśleć o tym jako o metodzie inicjującej lub możesz traktować to jako konstruktory, jeśli pochodzisz z innego środowiska programowania obiektowego, takiego jak C ++, Java itp. Teraz, gdy ustawimy metodę wewnątrz klasy, automatycznie otrzymają one instancję. Przejdźmy dalej z klasą Pythona i zaakceptujmy imię, nazwisko i wynagrodzenie za pomocą tej metody.

pracownik klasy: def __init __ (self, first, last, sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.' + last + '@ company.com' emp_1 = worker ('aayushi', 'johari', 350000) emp_2 = worker ('test', 'test', 100000) print (emp_1.email) print (emp_2.email)

Teraz w naszej metodzie „init” ustawiliśmy te zmienne instancji (self, first, last, sal). Self jest instancją, co oznacza, że ​​ilekroć piszemy self.fname = first, jest to to samo, co emp_1.first = 'aayushi'. Następnie stworzyliśmy instancje klasy Employer, do których możemy przekazać wartości określone w metodzie init. Ta metoda przyjmuje wystąpienia jako argumenty. Zamiast robić to ręcznie, zostanie to zrobione automatycznie teraz.

wyjaśnij różnicę między obiektami zmiennymi i niezmiennymi.

Następnie chcemy mieć możliwość wykonania jakiejś czynności. W tym celu dodamy plik metoda do tej klasy. Załóżmy, że chcę, aby funkcja wyświetlała pełne imię i nazwisko pracownika. Więc zaimplementujmy to praktycznie.

pracownik klasy: def __init __ (self, first, last, sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.' + last + '@ company.com' def fullname (self): return '{} {}'. format (self.fname, self.lname) emp_1 = worker ('aayushi', 'johari', 350000) emp_2 = worker ('test', 'test', 100000) print (emp_1.email) print (emp_2.email) print (emp_1.fullname ()) print (emp_2.fullname ())

Wynik-

aayushi.johari@company.com test.test@company.com aayushijohari testtest

Jak widać powyżej, utworzyłem w klasie metodę o nazwie „pełna nazwa”. Dlatego każda metoda wewnątrz klasy Pythona automatycznie przyjmuje instancję jako pierwszy argument. Teraz w ramach tej metody napisałem logikę, która wypisuje pełne imię i nazwisko i zwraca je zamiast emp_1 imię i nazwisko. Następnie użyłem „self”, aby działało ze wszystkimi instancjami. Dlatego, aby wydrukować to za każdym razem, używamy pliku metoda .

Idąc dalej z klasami Pythona, istnieją zmienne, które są wspólne dla wszystkich instancji klasy. Nazywa się je as zmienne klasowe . Zmienne instancji mogą być unikalne dla każdej instancji, takie jak nazwy, adres e-mail, sprzedawca itp. Skomplikowane? Zrozummy to na przykładzie. Zapoznaj się z poniższym kodem, aby dowiedzieć się, jaki jest roczny wzrost wynagrodzenia.

pracownik klasy: perc_raise = 1,05 def __init __ (self, first, last, sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.' + last + '@ company.com' def fullname (self): return '{} {}'. format (self.fname, self.lname) def apply_raise (self): self.sal = int (self.sal * 1.05 ) emp_1 = pracownik ('aayushi', 'johari', 350000) emp_2 = pracownik ('test', 'test', 100000) print (emp_1.sal) emp_1.apply_raise () print (emp_1.sal)

Wynik-

350000 367500

Jak widać powyżej, najpierw wydrukowałem wynagrodzenie, a następnie zastosowałem podwyżkę o 1,5%. Aby uzyskać dostęp do tych zmiennych klasy, musimy uzyskać do nich dostęp za pośrednictwem klasy lub wystąpienia tej klasy. Przyjrzyjmy się teraz różnym atrybutom w klasie Pythona.

Atrybuty w klasie Pythona

Atrybuty w Pythonie definiują właściwość obiektu, elementu lub pliku. Istnieją dwa typy atrybutów:

  • Wbudowane atrybuty klas: Istnieją różne wbudowane atrybuty obecne w klasach Pythona. Na przykład _dict_, _doc_, _name _, itd. Weźmy ten sam przykład, w którym chcę wyświetlić wszystkie pary klucz-wartość z pracownika1. W tym celu możesz po prostu napisać poniższą instrukcję, która zawiera przestrzeń nazw klas:

    print (emp_1 .__ dict__)

    Po jego wykonaniu otrzymasz dane wyjściowe, takie jak: {„fname”: „aayushi”, „lname”: „johari”, „sal”: 350000, „email”: „aayushi.johari@company.com”}

  • Atrybuty zdefiniowane przez użytkowników : Atrybuty są tworzone wewnątrz definicji klasy. Możemy dynamicznie tworzyć nowe atrybuty dla istniejących instancji klasy. Atrybuty można również powiązać z nazwami klas.

Następnie mamy publiczne, chronione i prywatny atrybuty. Przyjrzyjmy się im szczegółowo:

porażka szybko vs awaria bezpieczna
Nazewnictwo Rodzaj Znaczenie
NazwaPublicznyTe atrybuty mogą być swobodnie używane wewnątrz lub poza definicją klasy
_NazwaChronionyChronione atrybuty nie powinny być używane poza definicją klasy, chyba że wewnątrz definicji podklasy
__NazwaPrywatnyTen rodzaj atrybutu jest niedostępny i niewidoczny. Nie można ani odczytywać, ani zapisywać tych atrybutów, z wyjątkiem samej definicji klasy


Następnie przyjrzyjmy się najważniejszemu komponentowi w klasie Pythona, tj. Obiektom.

Co to są obiekty w klasie Pythona?

Jak omówiliśmy powyżej, obiekt może służyć do uzyskiwania dostępu do różnych atrybutów. Służy do tworzenia instancji klasy. Instancja to obiekt klasy utworzony w czasie wykonywania.

To dać ci szybki przegląd, obiekt to w zasadzie wszystko, co widzisz wokół. Na przykład: Pies jest przedmiotem klasy zwierząt, ja jestem przedmiotem klasy ludzkiej. Podobnie w tej samej klasie telefonów mogą znajdować się różne obiekty.Jest to bardzo podobne do wywołania funkcji, o którym już mówiliśmy. Zrozummy to na przykładzie:

class MyClass: def func (self): print ('Hello') # utwórz nową MyClass ob = MyClass () ob.func ()

Idąc naprzód z klasą Python, przyjrzyjmy się różnym koncepcjom OOP.

Pojęcia OOP

OOPs odnosi się do programowania obiektowego w Pythonie. Cóż, Python nie jest całkowicie zorientowany obiektowo, ponieważ zawiera pewne funkcje proceduralne. Teraz musisz się zastanawiać, jaka jest różnica między programowaniem proceduralnym a programowaniem obiektowym. Aby rozwiać wątpliwości, w programowaniu proceduralnym cały kod jest zapisywany w jednej długiej procedurze, nawet jeśli może zawierać funkcje i podprogramy. Nie można nim zarządzać, ponieważ dane i logika mieszają się ze sobą. Ale kiedy mówimy o programowaniu obiektowym, program jest podzielony na samodzielne obiekty lub kilka miniprogramów. Każdy obiekt reprezentuje inną część aplikacji, która ma własne dane i logikę do komunikacji między sobą. Na przykład witryna zawiera różne obiekty, takie jak obrazy, filmy itp.
Programowanie zorientowane obiektowo obejmuje koncepcję klasy, obiektu, dziedziczenia, polimorfizmu, abstrakcji w Pythonie itp. Rozważmy szczegółowo te tematy.

Klasa Pythona: dziedziczenie

Dziedziczenie pozwala nam dziedziczyć atrybuty i metody z klasy bazowej / nadrzędnej. Jest to przydatne, ponieważ możemy tworzyć podklasy i pobierać wszystkie funkcje z naszej klasy nadrzędnej. Następnie możemy nadpisywać i dodawać nowe funkcjonalności bez wpływu na klasę nadrzędną. Rozumiemy pojęcie klasy nadrzędnej i klasy podrzędnej na przykładzie.

Jak widać na obrazku, dziecko dziedziczy majątek po ojcu. Podobnie w Pythonie istnieją dwie klasy:

1. Klasa rodzica (klasa super lub podstawowa)

2. Klasa potomna (podklasa lub klasa pochodna)

Klasa, która dziedziczy właściwości, jest znana jako Dziecko Class, podczas gdy klasa, której właściwości są dziedziczone, jest znana jako Rodzic klasa.

Dziedziczenie odnosi się do zdolności tworzenia Podklasy które zawierają specjalizacje ich rodziców. Jest dalej podzielony na cztery typy, a mianowicie dziedziczenie pojedyncze, wielopoziomowe, hierarchiczne i wielokrotne. Zapoznaj się z poniższym obrazem, aby uzyskać lepsze zrozumienie.

Przejdźmy dalej z klasą Pythona i zrozummy, jak przydatne jest dziedziczenie.

Powiedz, chcę stworzyć zajęcia dla typów pracowników. Utworzę „programistów” i „menedżerów” jako podklasy, ponieważ zarówno programiści, jak i menedżerowie będą mieli imię i nazwisko, adres e-mail i wynagrodzenie, a wszystkie te funkcje będą dostępne w klasie pracowników. Tak więc zamiast kopiować kod dla podklas, możemy po prostu ponownie użyć kodu, dziedzicząc po pracowniku.

class pracownik: num_employee = 0 podbicie_kwota = 1,04 def __init __ (self, first, last, sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + last + '@ company.com' worker.num_employee + = 1 def fullname (self): return '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) programista (pracownik): pass emp_1 = developer ('aayushi', 'johari', 1000000) print (emp_1.email)
 Wynik - aayushi.johari@company.com

Jak widać na powyższym wyjściu, wszystkie szczegóły klasy pracownika są dostępne w klasie dewelopera.A co, jeśli chcę zmienić wartość raise_amount dla programisty na 10%? zobaczmy, jak można to praktycznie zrobić.

class pracownik: num_employee = 0 podbicie_kwota = 1,04 def __init __ (self, first, last, sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + last + '@ company.com' worker.num_employee + = 1 def fullname (self): return '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * podnieść_kwotę) programista (pracownik): podnieść_kwotę = 1,10 emp_1 = deweloper ('aayushi', 'johari', 1000000) print (emp_1.raise_amount)
 Wynik - 1.1

Jak widać, zaktualizowano procentowy wzrost wynagrodzeń z 4% do 10%.Teraz, jeśli chcę dodać jeszcze jeden atrybut, powiedzmy język programowania w naszej metodzie init, ale nie istnieje on w naszej klasie nadrzędnej. Czy jest na to jakieś rozwiązanie? Tak! możemy skopiować całą logikę pracownika i zrobić to, ale to znowu zwiększy rozmiar kodu. Aby tego uniknąć, rozważmy poniższy kod:

class pracownik: num_employee = 0 podbicie_kwota = 1,04 def __init __ (self, first, last, sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + last + '@ company.com' worker.num_employee + = 1 def fullname (self): return '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) class developer (worker): raise_amount = 1,10 def __init __ (self, first, last, sal, prog_lang): super () .__ init __ (first, last, sal) self.prog_lang = prog_lang emp_1 = developer ( „aayushi”, „johari”, 1000000, „python”) print (emp_1.prog_lang)

Dlatego za pomocą niewielkiej ilości kodu dokonałem zmian. Użyłem super .__ init __ (first, last, pay), który dziedziczy właściwości z klasy bazowej.Podsumowując, dziedziczenie służy do ponownego wykorzystania kodu i zmniejszenia złożoności programu.

Klasa Pythona: polimorfizm

Polimorfizm w informatyce to zdolność do prezentowania tego samego interfejsu dla różnych podstawowych form. W praktyce polimorfizm oznacza, że ​​jeśli klasa B dziedziczy po klasie A, nie musi dziedziczyć wszystkiego z klasy A, ale może robić niektóre z rzeczy, które klasa A robi inaczej. Jest najczęściej używany podczas dziedziczenia. Python jest niejawnie polimorficzny, ma możliwość przeciążania standardowych operatorów, dzięki czemu mają one odpowiednie zachowanie na podstawie ich kontekstu.

Rozumiemy na przykładzie:

class Zwierzę: def __init __ (self, name): self.name = name def talk (self): pass class Dog (Animal): def talk (self): print ('Hau') class Cat (Animal): def talk ( self): print ('MEOW!') c = Cat ('kitty') c.talk () d = Dog (Animal) d.talk ()

Wynik -

Miauczeć! Wątek

Następnie przejdźmy do innej koncepcji programowania obiektowego, tj. Abstrakcji.

Klasa Pythona: abstrakcja

Abstrakcja służy do upraszczania złożonej rzeczywistości poprzez modelowanie klas odpowiednich do problemu. Tutaj mamy klasę abstrakcyjną, której nie można utworzyć. Oznacza to, że nie można tworzyć obiektów ani instancji dla tych klas. Może być używany tylko do dziedziczenia pewnych funkcji, które nazywasz klasą bazową. Możesz więc dziedziczyć funkcje, ale jednocześnie nie możesz tworzyć instancji tej konkretnej klasy. Rozumiemy pojęcie klasy abstrakcyjnej na przykładzie poniżej:

from abc import ABC, abstractmethod class Pracownik (ABC): @abstractmethod def oblicz_płatę (self, sal): zaliczenie klasa Programista (pracownik): def oblicz_płatę (self, sal): finalsalary = sal * 1,10 powrót finalsalary emp_1 = Developer () drukuj (emp_1.calculate_salary (10000))

Wynik-

11000,0

Jak widać na powyższym wyjściu, podwyższyliśmy pensję podstawową do 10%, czyli pensja wynosi teraz 11000. Teraz, jeśli faktycznie zrobisz obiekt z klasy „Pracownik”, wyrzuca ci to błąd, tak jak robi to Python nie pozwalają na stworzenie obiektu klasy abstrakcyjnej. Ale korzystając z dziedziczenia, możesz faktycznie dziedziczyć właściwości i wykonywać odpowiednie zadania.

Więc chłopaki, chodziło o klasy i obiekty Pythona w pigułce. Omówiliśmy wszystkie podstawy klasy Python, obiekty i różne koncepcje zorientowane obiektowo w Pythonie, więc możesz zacząć ćwiczyć już teraz. Mam nadzieję, że podobało wam się czytanie tego bloga na temat „Python Class” i że jesteście jasni na temat każdego aspektu, który omówiłem powyżej. Po zajęciach z Pythona będę wymyślał więcej blogów na temat Pythona dla biblioteki scikit Learn i tablicy. Bądźcie czujni!

Masz do nas pytanie? Wspomnij o tym w sekcji komentarzy na tym blogu „Python Class”, a my skontaktujemy się z Tobą tak szybko, jak to możliwe.

Jaka jest różnica między klasą abstrakcyjną a interfejsem

Aby uzyskać dogłębną wiedzę o Pythonie i jego różnych aplikacjach, możesz dzięki naszym szkoleniom online na żywo z całodobowym wsparciem i dożywotnim dostępem.