Zawartość:
Uczenie się programowania obiektowego w Pythonie z podstaw wyjaśniono tutaj, omawiając następujące tematy z przykładami.
Klasa i obiekt:
W programowaniu obiektowym, klasa służy do deklarowania struktury danych zdefiniowanej przez użytkownika, która zawiera zestaw atrybutów. Atrybutami mogą być zmienne klasowe, zmienne instancji i metody. Zmienne, które są dostępne dla wszystkich instancji klasy, nazywane są zmiennymi klasowymi. Funkcje zadeklarowane w klasie nazywane są metodami. Zmienne zdefiniowane w dowolnej metodzie klasy i dostępne w bieżącej instancji klasy nazywane są zmiennymi instancji. Klasa jest deklarowana w Pythonie, definiując słowo kluczowe klasy, a następnie nazwa klasy i dwukropek (:). Składnia klasy jest zdefiniowana poniżej.
Składnia klasy:
ClassName:Instancja lub kopia klasy nazywa się obiekt Służy do uzyskania dostępu do zmiennych klas i metod klasowych. Klasa jest bezużyteczna bez deklarowania obiektu, ponieważ klasa zawiera opis tylko obiektu, który nie przeznacza żadnej pamięci. obiekt jest zadeklarowane, wspominając nazwę klasy z początkiem i zakończeniem pierwszych nawiasów. Jeśli klasa zawiera dowolną metodę konstruktora z parametrami, a następnie musisz zdefiniować wartość parametrów w czasie obiekt deklaracja. Składnia obiektu podano poniżej.
Składnia obiektu:
Object_name = class_name ()Lub
Object_name = class_name (wartość1, wartość2,…)Deklaracja prostej klasy i deklaracja obiektu tej klasy pokazano w następującym skrypcie. Klasa nazwana 'Książka„Został tutaj ogłoszony, który zawiera trzy zmienne klasy (nazwa_księgi, nazwa_ autora i cena) i metoda wymieniona book_discount_price (). Metoda obliczy cenę książki po 5% zniżce i wydrukuje szczegóły książki z oryginałem i ceną rabatową. Zmienna obiektu o nazwie OBJBOOK została zdefiniowana w skrypcie, aby utworzyć instancję klasy i wywołać metodę klasy.
ClassandObject.py
# Zdefiniuj klasęWyjście:
Następujące dane wyjściowe pojawią się po wykonaniu powyższego skryptu.
Konstruktor:
Konstruktor jest metodą klasy zwanej automatycznie w czasie deklaracji obiektu tej klasy. Służy głównie do zainicjowania obiektu zmiennej. def Słowo kluczowe służy do deklarowania dowolnej metody w deklaracji klasy Python, a nazwa metody konstruktora to __w tym__() W Python. W Pythonie można zadeklarować dwa rodzaje konstruktorów. Są to konstruktor bez parametrów i sparametryzowany konstruktor. Zastosowania obu konstruktorów pokazano w tej części tego samouczka.
A. Konstruktor bez parametrów
Konstruktor, który zawiera tylko jeden wymieniony argument samego siebie nazywa się konstruktor bez parametrów lub domyślny. Nie jest wymagany parametr w momencie deklaracji obiektu klasy zawierającej konstruktor bez parametru. Sposób ogłoszenia konstruktora bez parametrów pokazano w następującym skrypcie. Tutaj Klient Klasa zawiera konstruktor bez parametru, który zainicjuje cztery zmienne klasy, gdy zostanie utworzony jakikolwiek obiekt klasy. Następnie obiekt nazywanej klasy Objcustomer został zadeklarowany w celu uzyskania dostępu do zmiennych klasy.
default_constructor.py
# Zdefiniuj klasę klientówWyjście:
Następujące dane wyjściowe pojawią się po wykonaniu powyższego skryptu.
B. Sparametryzowany konstruktor
Konstruktor, który zawiera jeden lub więcej argumentów z 'samego siebie„Argument jest nazywany sparametryzowanym konstruktorem. Musisz przekazać wartości parametrów w momencie tworzenia obiektu klasy. Sposób deklarowania sparametryzowanego konstruktora został pokazany w następującym skrypcie. Tutaj Klient klasa jest zadeklarowana sparametryzowanym konstruktorem i dwiema metodami. Metoda wymieniona Balance_after_deposit () jest zdefiniowane w celu dodania kwoty depozytowej z saldem. Metoda wymieniona Balance_after_withDraw () jest zdefiniowane w celu odliczenia kwoty wypłaty od salda. Następnie zdefiniowana jest zmienna obiektu, aby wyświetlić podstawowe szczegóły klienta, saldo po depozyt i saldo po wycofaniu się.
Paremetetized_constructor.py
# Zdefiniuj klasę klientówWyjście:
Następujące dane wyjściowe pojawią się po wykonaniu powyższego skryptu. Tutaj saldo otwarcia wynosi 200000. Saldo staje się 220000 po dodaniu 30000 i odejmowaniu 10000.
Dziedzictwo:
Jedną z podstawowych cech programowania obiektowego jest dziedzictwo. Sposób na utworzenie nowej klasy z istniejącej klasy nazywa się dziedzictwem. Istniejąca klasa nazywa się klasą nadrzędną lub klasą podstawową, a odziedziczona nowa klasa nazywa się klasą dziecięcą lub pochodną. Klasa dziecka będzie zawierać cechy klasy podstawowej po dziedzictwie. Jak można zastosować dziedziczenie w klasie Python, pokazano w poniższym przykładzie. W scenariuszu ''Student„jest klasą rodziców i”StudentDetails„Czy klasa dzieci. Obie klasy mają sparametryzowane konstruktory. Klasa nadrzędna ma nazwaną metodę Display Basic () Aby wydrukować identyfikator, nazwisko i zmienne e -mailowe, nazwa i e -mail. Klasa dziecka ma nazwaną metodę displayInfo () Aby wydrukować wartości seria i zmienne semestralne klasy dzieci. Konstruktor klasy nadrzędnej nazywa się konstruktorem klasy dzieci. Po deklaracji klasowej obiekt klasy nadrzędnej został zadeklarowany z trzema parametrowymi wartościami w celu zainicjowania zmiennych klasy klasy nadrzędnej, a metoda klasy nadrzędnej została wywołana w celu wyświetlenia tych wartości. Następnie obiekt klasy dziecka został zadeklarowany z trzema parametrowymi wartościami zainicjowania zmiennych klasowych klasy dziecka, a metoda klasy dziecięcej została wywołana w celu wyświetlania tych wartości.
dziedzictwo.py
# Zdefiniuj klasę nadrzędnąWyjście:
Następujące dane wyjściowe pojawią się po wykonaniu powyższego skryptu.
Kapsułkowanie:
Inną podstawową cechą programowania obiektowego jest kapsułkowanie. Sposób ukrycia konkretnych zmiennych i metod klasy nazywa się enkapsulacja. Służy do ustawienia ograniczenia w celu uzyskania dostępu do konkretnych danych. Głównym celem tej funkcji jest zapewnienie bezpieczeństwa danych poprzez ukrywanie danych. Zakapulowanie można wdrożyć w Python poprzez deklarowanie prywatnych lub chronionych członków danych klasy. Jak można wdrożyć enkapsulacja w Pythonie, pokazano w poniższym przykładzie. W skrypcie Dodać klasa stworzona przez odziedziczenie Numer klasa. Prywatny członek nazwany '__wynik„Zadeklarował w klasie dzieci, aby przechowywać sumę dwóch liczb, a ta zmienna jest dostępna tylko w klasie dzieci. Konstruktor klasy nadrzędnej zainicjuje dwie zmienne klasy za pomocą liczb. Zgodnie ze skryptem konstruktor klasy dzieci wywoła konstruktor klasy nadrzędnej, obliczy sumę zmiennych klasowych i wydrukować wynik dodania. Po deklaracji klasowej przedmiot klasy dzieci został ogłoszony. Następnie prywatny członek klasy dziecięcej użył w funkcji drukowania, która wygeneruje błąd.
enkalsulation.py
# Zdefiniuj klasę nadrzędnąWyjście:
Następujące dane wyjściowe pojawią się po wykonaniu powyższego skryptu. Po zdefiniowaniu obiektu wywołano metodę konstruktora i wydrukowano sumę 10 i 30. Pojawił się komunikat o błędzie, aby uzyskać dostęp do prywatnego członka z zewnątrz klasy.
Wielopostaciowość:
Inną podstawową cechą programowania obiektowego jest polimorfizm. Znaczenie poli to „wiele” i morfizm to „formy”. Sposób wielokrotnego deklarowania tej samej funkcji w różnych celach nazywa się polimorfizmem. Kodowanie staje się łatwiejsze do korzystania z tej funkcji OOP. Tę funkcję można zaimplementować przy użyciu skryptu Pythona, takiego jak polimorfizm w różnych klasach, polimorfizm w odziedziczonych klasach itp. Jak polimorfizm można zaimplementować w różnych klasach za pomocą skryptu Pythona, pokazano w poniższym przykładzie. W skrypcie zadeklarowano dwie niepowiązane klasy o nazwie Rectangle i Circle. Obie klasy mają sparametryzowany konstruktor i wymienioną metodę obszar(). Tutaj obie klasy zawierają tę samą metodę, ale cel tej metody jest inny. W klasie prostokątnej konstruktor zainicjuje dwie wymienione zmienne wysokość I szerokość, i obszar() Metoda obliczy obszar prostokąta. W klasie okręgu konstruktor zainicjuje jedną wymienioną zmienną promień, i obszar() Metoda obliczy obszar koła. Po ogłoszeniu klasy, od użytkownika zostaną pobrane dwie wartości liczbowe, aby przekazać wartości wysokości i szerokości do konstruktora Prostokąt klasa w momencie deklaracji obiektu. Następnie obszar() Metoda Prostokąt Klasa zostanie wezwana do wydrukowania obszaru prostokąta na podstawie wartości wejściowych. Następnie jedna wartość liczbowa zostanie pobrana od użytkownika, aby przekazać wartość promienia konstruktorowi Koło klasa w czasie tworzenia obiektu. , obszar() Metoda Koło Klasa zostanie wezwana do wydrukowania obszaru okręgu na podstawie wartości wejściowej.
wielopostaciowość.py
# Zdefiniuj klasę prostokątaWyjście:
Następujące dane wyjściowe pojawią się po wykonaniu powyższego skryptu. Zgodnie z wyjściem 5 przyjął wartość wysokości, a 2 uznało wartość szerokości. W przypadku tych wartości obszar recTan0gle wynosi 10 (5 × 2), który został wydrukowany. Następnie 2 uznało się za wartość promienia, a obszar okręgu wynosi 12.56 (3.14x2x2), który został wydrukowany.
Getter and Setter:
Metoda zastosowana do odczytu wartości właściwości nazywa się Getter, a metoda stosowana do ustawienia wartości właściwości nazywa się setter. W programowaniu zorientowanym na obiekty getter służy do dostępu do prywatnych atrybutów klasy, a setter służy do ustawiania wartości prywatnych atrybutów klasy klasy. Głównymi celami tej funkcji jest zapewnienie kapsułkowania danych i sprawdzania poprawności danych. Getter i setter można zaimplementować za pomocą normalnej funkcji lub dekoratora @Property. W tej części samouczka pokazano oba sposoby wdrażania settera i gettera.
Setter i getter za pomocą normalnej funkcji:
Poniższy skrypt pokazuje, w jaki sposób można użyć normalnej funkcji do wszczepienia metod Gettera i Setter. W skrypcie Osoba Klasa zawiera niestandardowe metody gettera i setter do odczytu wartości zmiennych klasy prywatnej i ustawiania wartości zmiennej e -mail, która jest członkiem prywatnym. Pusta wartość przeszła dla zmiennej e -mail w momencie tworzenia obiektów, a metoda niestandardowa setter została użyta do ustawienia wartości wiadomości e -mail. Metoda niestandardowa getter zwróci wszystkie wartości zmiennej klasy jako listy.
custom_setter_getter.py
# Zdefiniuj klasęWyjście:
Następujące dane wyjściowe pojawią się po wykonaniu powyższego skryptu.
Setter i getter za pomocą dekoratora @Property:
Poniższy skrypt pokazuje, w jaki sposób dekorator @Property może być używany do wszczepienia metod gettera i settera. W skrypcie getter i setter zadeklarowały za pomocą dekoratora @Property, aby ustawić wartość zmiennej nazwy, członek klasy prywatny. Po ogłoszeniu klasy obiekt klasy został zdefiniowany, a wartość zmiennej nazwy została przypisana i odzyskana za pomocą settera i getter.
decorator_setter_getter.py
# Zdefiniuj klasęWyjście:
Następujące dane wyjściowe pojawią się po wykonaniu powyższego skryptu.
Operator i funkcja przeciążenia:
Gdy dowolna funkcja lub operator jest używany do innego celu w oparciu o parametr funkcji lub operandy zamiast normalnego użycia funkcji lub operatora, nazywane jest przeciążeniem. Funkcja ponownego użycia może być zaimplementowana w programowaniu zorientowanym na obiekty za pomocą przeciążenia operatora i przeciążenia funkcji. Jest to przydatna funkcja OOP, ale nadmierne użycie tej funkcji stwarza trudność w zarządzaniu kodem. Proste użycie przeciążenia operatora i przeciążenia funkcji w klasie Python zostało pokazane w tym samouczku.
Przeciążenie operatora:
Operator jest używany na dwóch operantach. Cel każdego operatora jest inny. Na przykład istnieje wiele zastosowań operatora „+”, na przykład do dodawania, łączenia dwóch ciągów itp. Ale gdy operator „+” jest używany do innego celu, nazywa się to przeciążeniem operatora. Specjalne funkcje są używane do różnych rodzajów przeciążenia operatora. Funkcja specjalna jest zadeklarowana za pomocą „__” na początku i zakończeniu nazwy funkcji. W Pythonie istnieje wiele specjalnych funkcji różnych rodzajów operatorów. Operator może być matematyczny, porównanie operator, operator przypisania, itp. W tej części tego samouczka pokazano użycie specjalnej funkcji operatora matematycznego, aby zrozumieć pojęcie przeciążenia operatora w Python.
Operator matematyczny:
Operatorzy używane do operacji arytmetycznych nazywane są operatorem matematycznym. Te operatorzy mogą być używane do specjalnego celu za pomocą specjalnej funkcji. Niektóre specjalne funkcje operatora matematycznego są wymienione poniżej.
Imię operatora | Symbol | Specjalna funkcja |
---|---|---|
Dodatek | + | __add __ (ja, inne) |
Odejmowanie | - | __Sub __ (ja, inne) |
Mnożenie | * | __mul __ (ja, inne) |
Dział | / | __trediv __ (jaźń, inne) |
Moduł | % | __mod __ (ja, inne) |
Moc | ** | __pow __ (ja, inne) |
Korzystanie z specjalnej funkcji operatora zasilania (**):
__pow __ () Specjalna funkcja służy do przeciążenia operatora zasilania. Głównym celem operatora energii jest obliczenie wartości mocy określonej liczby. Ale jeśli potrzebujemy obliczyć wartości mocy za pomocą wartości punktowych, ogólny operator zasilania nie zadziała. Załóżmy, że istnieją dwa punkty (3, 2) i (2, 4). Potrzebujemy sumy 32 i 24. W takim przypadku musimy użyć specjalnej funkcji operatora zasilania. Funkcja __pow __ () może obliczyć sumę mocy na podstawie wartości punktowych pokazanych w następującym skrypcie. Klasa SumofPower zawiera sparametryzowany konstruktor do zainicjowania dwóch zmiennych klasowych, __pow __ () funkcja obliczania suma dwóch mocy na podstawie wartości punktowych i __str __ () funkcja wydrukowania obiektu klasy. Następnie zadeklarowano dwa obiekty klasy. Operator zasilania użył dwóch zmiennych obiektów w wydruku () funkcja, aby wywołać __pow __ () funkcja ukończenia operacji.
operator_overloading.py
# Zdefiniuj klasęWyjście:
Następujące dane wyjściowe pojawią się po wykonaniu powyższego skryptu. 32 to 9, a 24 to 16. Suma 9 i 16 wynosi 25, która jest wyświetlana na wyjściu.
Przeciążenie funkcji:
Czasami musimy napisać wiele metod, które są dość podobne, ale różnią się tylko w niektórych częściach. W takim przypadku można zdefiniować jedną metodę, aby wykonać te same zadania za pomocą przeciążenia funkcji. Złożoność kodu można usunąć, a kod staje się wyraźniejszy za pomocą przeciążenia funkcji. Wyjście funkcji zależy od argumentu przekazanego do funkcji. Jak przeciążenie funkcji można zaimplementować w Python, pokazano w następującym skrypcie. Głównym celem skryptu jest wykonanie czterech rodzajów operacji arytmetycznych o wartości domyślnej lub wartościach przekazanych w momencie tworzenia obiektów. Metoda wymieniona Oblicz () został tu użyty do wykonywania operacji arytmetycznych. Metoda została nazwana czterokrotnie w skrypcie, aby wykonać cztery rodzaje zadań. Gdy metoda wywoła bez żadnego argumentu, wyświetli tylko wiadomość. Gdy metoda wywoła „+” jako wartość argumentu, obliczy wartości domyślne. Gdy metoda wywoła „-” i wartości liczbowej jako wartości argumentu, odejmie drugą wartość domyślną od wartości argumentu. Gdy metoda wywołuje „*” i dwie wartości liczbowe jako wartości argumentu, obliczy dwie wartości argumentów.
funkcja_overloading.py
# Zdefiniuj klasęWyjście:
Następujące dane wyjściowe pojawią się po wykonaniu powyższego skryptu. 'Żadnego operatora nie jest podawane„Wiadomość wydrukowała do wywołania metody bez żadnych argumentów. Suma 25 i 35 została wydrukowana do wywołania metody jednym argumentem. Wartość odejmowania 50-35 została wydrukowana do wywołania metody z dwiema wartościami argumentów. Wartość mnożenia 3 i 2 wydrukowała do wywołania metody z trzema wartościami argumentów. W ten sposób przeciążenie funkcji zostało zaimplementowane w skrypcie, aby używać tej samej funkcji wiele razy.
Wniosek:
Podstawowe programowanie obiektowe w Pythonie zostało wyjaśnione w tym samouczku za pomocą bardzo prostych przykładów Pythona. Omówiono tutaj najczęstsze cechy OOP, aby pomóc czytelnikom poznać sposób OOP w Python i możliwość pisania programu Python za pomocą klasy i obiektu.