Polimorfizm w Pythonie

Polimorfizm w Pythonie
Wielopostaciowość oznacza „wiele form.„Polimorfizm Ważna cecha programowania obiektowego (OOP). Gdy ta sama metoda jest deklarowana wielokrotnie, do wielu celów i w różnych klasach, nazywa się ją polimorfizmem. Inną cechą OOP jest dziedzictwo, przez którą klasę dziecięcą można stworzyć, dziedzicząc funkcje klasy nadrzędnej. Czasami wymaga to, aby programista zadeklarował metodę o tej samej nazwie zarówno w klasach rodziców, jak i dzieci w różnych celach. Ten rodzaj zadania można również wdrożyć za pomocą polimorfizmu. W tym artykule wyjaśniono, w jaki sposób polimorfizm można zdefiniować w programowaniu obiektowym (OOP).

Przykład 1: Polimorfizm z funkcjami i obiektami

Poniższy skrypt pokazuje użycie polimorfizmu między dwiema różnymi klasami. Do tworzenia obiektu tych klas używana jest funkcja. Wartość wymienionej zmiennej kolor jest inicjowany w __w tym__() Metoda obu 'Papuga„I”Struś„Zajęcia w czasie tworzenia obiektów. cechy() Metoda jest zdefiniowana w obu klasach, ale wyjście metody dla każdej klasy jest nieco inne. Create_object () Funkcja służy do utworzenia obiektu klasy. Ta funkcja jest wykonywana dwukrotnie w celu utworzenia obiektu w 'Papuga„klasa i w”Struś' klasa. Każdy wywoła metodę funkcji () obu klas i wydrukuje wyjście.

#!/usr/bin/env python3
# Zdefiniuj klasę papugi
klasa Parrot ():
def __init __ (jaźń, kolor):
samego siebie.kolor = kolor
Funkcje def (ja):
Drukuj („Kolor papugi to %s” %self.kolor)
Drukuj („papuga może latać”)
# Zdefiniuj klasę strusi
Klasa Ekstrich ():
def __init __ (jaźń, kolor):
samego siebie.kolor = kolor
Funkcje def (ja):
Drukuj („Kolor struś to %s” %self.kolor)
Drukuj („struś nie może latać”)
# Zdefiniuj funkcję, aby wywołać metodę klasy
def Create_Object (obiekt):
Obiekt.cechy()
# Utwórz obiekt klasy papugi
Create_Object (Parrot („zielony”))
# Utwórz obiekt klasy strusi
Create_Object (Estrich („czarno -biały”))

Wyjście

Poniższe dane wyjściowe pokazuje, że obiekt ''Papuga„klasa jest tworzona z”Zielony„Jak kolor wartość. Funkcja drukuje wyjście, wywołując cechy() metoda 'Papuga' klasa. Następnie obiekt ''Struś„klasa jest tworzona z”Czarny i biały„Jak kolor wartość. Funkcja drukuje wyjście, wywołując cechy() metoda 'Struś' klasa.

Przykład 2: Polimorfizm w niepowiązanych metodach klasowych

Podobnie jak w poprzednim przykładzie, następujący skrypt pokazuje użycie polimorfizmu w dwóch różnych klasach, ale do deklarowania obiektu nie stosuje się żadnej niestandardowej funkcji. __w tym__() Metoda obu 'Menedżer' I 'Urzędnik„Klasy zainicjują niezbędne zmienne. Polimorfizm jest tutaj zaimplementowany, tworząc post_details () I wynagrodzenie() Metody w obu klasach. Zawartość tych metod jest inna dla każdej z tych klas. Następnie zmienne obiektowe są tworzone dla obu klas i iterowane przez Do pętla. W każdej iteracji post_details () I wynagrodzenie() Metody są wywoływane w celu wydrukowania wyjścia.

#!/usr/bin/env python3
# Zdefiniuj klasę o nazwie Manager
Menedżer klas:
def __init __ (ja, imię, dział):
samego siebie.Nazwa = nazwa
samego siebie.post = „menedżer”
samego siebie.dział = dział
# Zdefiniuj funkcję, aby ustawić szczegóły
def post_details (self):
Jeśli ja.dział.Upper () == „hr”:
samego siebie.Basic = 30000
w przeciwnym razie:
samego siebie.Basic = 25000
samego siebie.Houserent = 10000
samego siebie.Transport = 5000
Drukuj („Postanie %s to %s” %(jaźń.Imię, ja.post))
# Zdefiniuj funkcję, aby obliczyć wynagrodzenie
pensja def (ja):
Wynagrodzenie = ja.podstawowe + ja.Houserent + Self.transport
Wynagrodzenie zwrotu
# Zdefiniuj klasę o nazwie Clerk
Urzędnik klas:
def __init __ (ja, imię):
samego siebie.Nazwa = nazwa
samego siebie.post = „urzędnik”
# Zdefiniuj funkcję, aby ustawić szczegóły
def post_details (self):
samego siebie.podstawowy = 10000
samego siebie.Transport = 2000
Drukuj („Postanie %s to %s” %(jaźń.Imię, ja.post))
# Zdefiniuj funkcję, aby obliczyć wynagrodzenie
pensja def (ja):
Wynagrodzenie = ja.podstawowe + ja.transport
Wynagrodzenie zwrotu
# Utwórz obiekty dla klas
Menedżer = menedżer („kabir”, „hr”)
Clerk = Clerk („Robin”)
# Wywołaj te same funkcje z różnych klas
dla obj in (menedżer, urzędnik):
obj.post_details ()
druk („pensja to”, obj.wynagrodzenie())

Wyjście

Poniższe dane wyjściowe pokazuje, że obiekt ''Żłób„Klasa jest używana w pierwszej iteracji Do pętla i pensja menedżera są drukowane po obliczeniach. ObiektUrzędnik„Klasa jest używana w drugiej iteracji Do pętla i pensja urzędnika jest drukowana po obliczeniach.

Przykład 3: Polimorfizm w powiązanych metodach klasowych

Poniższy skrypt pokazuje użycie polimorfizmu między dwiema klasami dziecka. Tutaj oba 'Trójkąt' I 'Koło„Czy zajęcia dla dzieci klasy macierzystej nazwane”Kształt geometryczny.„Zgodnie z dziedzictwem klasa dziecięca może uzyskać dostęp do wszystkich zmiennych i metod klasy nadrzędnej. __w tym__() metoda 'Kształt geometryczny„Klasa jest używana w obu klasach dzieci do zainicjowania zmiennej nazwa za pomocą Super() metoda. Wartości baza I wysokość 'Trójkąt„Klasa zostanie zainicjowana w momencie tworzenia obiektów. W ten sam sposób wartości promienia ''Koło„Klasa zostanie zainicjowana w momencie tworzenia obiektów. Formuła obliczania obszaru trójkąta jest ½ × baza × wysokość, który jest zaimplementowany w obszar() metoda 'Trójkąt' klasa. Wzór obliczania obszaru koła jest 3.14 × (promień)2, który jest zaimplementowany w obszar() metoda 'Koło' klasa. Nazwy obu metod są takie same, ale cel jest inny. Następnie wartość ciągu zostanie pobrana od użytkownika w celu utworzenia obiektu i wywołania metody na podstawie wartości. Jeśli użytkownik wpisuje „trójkąt”, to obiekt ''Trójkąt' klasa zostanie utworzona, a jeśli użytkownik wpisuje się „okrążeniem”, to obiekt 'Koło' Klasa zostanie utworzona. Jeśli użytkownik wpisuje dowolny tekst bez „trójkąta” lub „okręgu”, nie zostanie utworzony żaden obiekt i zostanie wydrukowany komunikat o błędzie.

#!/usr/bin/env python3
# Zdefiniuj klasę nadrzędną
klasa geometric_shape:
def __init __ (ja, imię):
samego siebie.Nazwa = nazwa
# Zdefiniuj klasę dziecka do obliczania obszaru trójkąta
Trójkąt klasowy (geometric_shape):
def __init __ (jaźń, nazwa, podstawa, wysokość):
Super().__init __ (nazwa)
samego siebie.baza = podstawa
samego siebie.Wysokość = wysokość
Obszar def (ja):
wynik = 0.5 * ja.baza * ja.wysokość
wydrukuj („obszar %s = %5.2f " %(jaźń.Nazwa, wynik))
# Zdefiniuj klasę dziecka do obliczania obszaru koła
Krąg klasowy (geometric_shape):
def __init __ (ja, imię, promień):
Super().__init __ (nazwa)
samego siebie.promień = promień
Obszar def (ja):
wynik = 3.14 * ja.Promień ** 2
wydrukuj („obszar %s = %5.2f " %(jaźń.Nazwa, wynik))
cal_area = wejście ("Który obszar chcesz obliczyć? trójkąt/okrąg \ n ")
Jeśli cal_area.Upper () == „trójkąt”:
base = float (input ('Wprowadź podstawę trójkąta:'))
wysokość = float (input ('Wprowadź wysokość trójkąta:'))
obj = trójkąt („trójkąt”, podstawa, wysokość)
obj.obszar()
Elif Cal_area.Upper () == „Circle”:
Radius = float (input ('Wprowadź promień koła:'))
Obj = Circle („Circle”, promień)
obj.obszar()
w przeciwnym razie:
Drukuj („niewłaściwe wejście”)

Wyjście

W następnym wyjściu skrypt jest wykonywany dwukrotnie. Pierwszy raz, trójkąt jest traktowany jako wejście, a obiekt jest inicjowany przez trzy wartości ”Trójkąt', baza, I wysokość. Wartości te są następnie wykorzystywane do obliczenia obszaru trójkąta, a wyjście zostanie wydrukowane. Drugi raz, koło jest traktowany jako dane wejściowe, a obiekt jest inicjowany przez dwie wartości ”Koło' I promień. Wartości te są następnie wykorzystywane do obliczenia obszaru koła, a wyjście zostanie wydrukowane.

Wniosek

W tym artykule wykorzystano łatwe przykłady, aby wyjaśnić trzy różne zastosowania polimorfizmu w Pythonie. Pojęcie polimorfizmu można również zastosować bez klas, metodę, której nie wyjaśniono tutaj. Ten artykuł pomógł czytelnikom dowiedzieć się więcej o tym, jak zastosować polimorfizm w programowaniu Pythona opartego na obiekcie.