Czym jest polimorfizm w Pythonie? Polimorfizm wyjaśniony na przykładach

Opublikowany: 2021-03-05

Spis treści

Wstęp

Python to wysokopoziomowy, interpretowany język programowania o otwartym kodzie źródłowym. Zyskał wiele uwagi wśród wielu programistów i deweloperów, ponieważ obsługiwał biblioteki, które pomagają w wielu zadaniach, takich jak eksploracyjna analiza danych, programowanie GUI itp. Również programowanie w pythonie jest bardzo interesujące.

W tym artykule omówimy interesującą funkcję Pythona. Więc zacznijmy!

Co to jest polimorfizm?

Słowo polimorfizm pochodzi od greckiego słowa poli (oznaczającego wiele) i morfizmu (formy). Oznacza to, że pojedyncza nazwa funkcji lub nazwa metody może mieć wiele postaci. A to spełnia życzenie uniknięcia powielania kodu w implementacji.

Ale polimorfizm w Pythonie różni się nieco od polimorfizmu w innych językach programowania. Języki programowania, takie jak java i c++, obsługują polimorfizm w czasie kompilacji (przeciążanie metod). W przypadku przeciążania metod wiele metod może mieć tę samą nazwę metody, ale różnić się pod względem sygnatury parametru. Ta funkcja nie jest obsługiwana przez Pythona. Jeśli wiele metod ma tę samą funkcję, najnowsza implementacja funkcji zastąpi wcześniejszą implementację funkcji.

Polimorfizm funkcji

Polimorfizm funkcji w Pythonie można podzielić na dwa polimorfizmy zdefiniowane przez użytkownika i polimorfizm predefiniowany.

Możemy zaimplementować polimorfizm zdefiniowany przez użytkownika, aby wywołać tę samą funkcję z inną sygnaturą parametru, co można uznać za niewielką kompensację niedostępności przeciążania metod w pythonie. Przejdźmy przez przykładowy kod

def mul (a,b,c= 1 ):
zwróć a*b*c;

drukuj(mul( 1 , 2 , 3 ))
drukuj(mul( 1 , 2 ))

W powyższym kodzie, mimo że liczba przekazanych parametrów nie jest równa, obie instrukcje print odnoszą się do tej samej metody. W drugim wywołaniu funkcji parametrowi c przypisywana jest wartość domyślna 1.

Podobnie kilka predefiniowanych metod w Pythonie wykazuje cechy polimorfizmu, gdzie pojedyncza metoda może akceptować parametry różnych typów danych. Metody takie jak len() wykazują tę funkcję. A oto kod, który to zilustruje.

print(dł([ 1 , 2 , 3 , 4 ]))
print(len(( 1 , 2 , 3 , 4 )))
print(len( “python” ))
print(len({ „klucz1” : „wartość1” , „klucz2” : „wartość2” }))

W powyższym kodzie ta sama metoda len() jest używana dla listy, krotki, ciągu i słownika.

Zamówienie: aplikacje Pythona w prawdziwym świecie

Przeciążenie operatora

Operator taki jak „+” może być używany na wiele sposobów. Na przykład można go użyć do dodania dwóch liczb, ciągów, a także list itp. A oto kod, aby to zademonstrować.

l1=[ 1 , 2 , 3 ]
l2=[ 3 , 4 , 5 ]

n1= 2
n2= 3

s1= „hej”
s2= „tam”

drukuj(l+l1)
drukuj(s1+s2)
drukuj(n1+n2)

Zastępowanie metody

Zastępowanie metod jest również uważane za polimorfizm środowiska uruchomieniowego i jest obsługiwane przez wiele języków, takich jak java, c++ i python.

Ta funkcja jest związana z dziedziczeniem, klasa podrzędna w pythonie dziedziczy funkcje członkowskie i zmienne członkowskie ze swojej klasy nadrzędnej. A jeśli uważamy, że implementacja metody klasy nadrzędnej nie ma znaczenia, możemy nadpisać tę metodę w klasie potomnej. A modyfikowanie funkcji składowych zgodnie z wymaganiami w klasie podrzędnej jest określane jako nadpisywanie metody.

klasa jednośladu :
def paliwo (własne):
print( „dwukołowiec potrzebuje paliwa do jazdy” )
def pojemność (własna):
print( „rowery mieszczą maksymalnie 2 osoby” )

klasa_rower_elektryczny ( dwukołowiec ):
def paliwo (własne):
print( „rowery elektryczne jeżdżą na baterii” )
klasa_rower_benzynowy (dwukołowiec) :
def paliwo (własne):
print( „rower benzynowy jeździ na benzynie” )
rower=dwukołowiec()
ebike=rower_elektryczny()
pbike=rower_benzynowy()

rower.paliwo()
rower.pojemność()
e-rower.paliwo()
ebike.pojemność()
rower.paliwo()
rower.pojemność()

W powyższym kodzie dwukołowiec to klasa nadrzędna, a rower elektryczny, rower benzynowy to klasy podrzędne. A metody fuel(), capacity() są dziedziczone przez klasy potomne electric_bike i petrol_bike. Teraz możemy zaktualizować implementację metod, jeśli jest to wymagane, a wewnątrz klasy electric_bike ponownie zaimplementowaliśmy metodę fuel(), podobnie zaimplementowaliśmy metodę fuel() w klasie petrol_bike.

Na przykład w kodzie ebike.fuel() drukuje „rowery elektryczne napędzane akumulatorem”, a pbike.fuel() drukuje rowery benzynowe napędzane benzyną.

Polimorfizm w metodach klas

Python pozwala różnym klasom mieć tę samą nazwę metody, a to jest objęte funkcją polimorfizmu. A wywołanie metody opiera się na obiekcie, którego używamy do wywołania metody.

rower klasy :
def paliwo (własne):
print( „rower nie potrzebuje paliwa!” )
def pojemność (własna):
print( „rowery nadają się do jazdy jednoosobowej” )

klasa_rower_elektryczny : _
def paliwo (własne):
drukuj ( „rowery elektryczne działają na baterii” )
def pojemność (własna):
print( „rowery elektryczne są odpowiednie dla maksymalnie 2 osób” )

klasa_rower_benzynowy : _
def paliwo (własne):
print( „rower benzynowy jeździ na benzynie” )
def pojemność (własna):
print( „rowery benzynowe są odpowiednie dla maksymalnie 2 osób” )

ekorower=rower()
ebike=rower_elektryczny()
pbike=rower_benzynowy()
l=[ekorower,erower,prower]

dla obj w l:
obj.paliwo()
obj.pojemność()

W powyższym kodzie stworzyliśmy trzy obiekty trzech klas rower, rower_elektryczny i rower_benzynowy. Wszystkie trzy klasy mają te same nazwy metod. Teraz zadaniem kompilatora jest podjęcie decyzji, która metoda ma zostać wywołana na podstawie typu obiektu użytego do wywołania metody.

Na przykład ecobike.fuel() wywoła metodę fuel() klasy rowerów, a ebike.fuel() wywoła metodę fuel() klasy electric_bike. Wszystkie te obiekty dołączamy do listy iw każdej iteracji będziemy wywoływać te same nazwy funkcji, ale zmieni się typ obiektu, który wywołuje metodę. W pierwszej iteracji nazywa się metody klasy rower, aw dalszych iteracjach metody rower_elektryczny, rower_benzynowy.

Przeczytaj: Pomysły i tematy dotyczące projektów w Pythonie

Wniosek

W tym artykule zrozumieliśmy, co oznacza polimorfizm, omówiliśmy, czym python różni się w przypadku przeciążania metod. Przeszedł przez demonstracje różnych możliwości polimorfizmu w pytonach, takich jak przeciążanie operatorów, polimorfizm funkcji, nadpisywanie metod i polimorfizm w metodach klasowych.

Teraz, gdy już wiesz o polimorfizmie w Pythonie, zaimplementuj swój następny kod Pythona, korzystając ze wszystkich tych funkcji!

Jeśli jesteś zainteresowany nauką o danych, sprawdź IIIT-B i upGrad's PG Diploma in Data Science, który jest stworzony dla pracujących profesjonalistów i oferuje ponad 10 studiów przypadków i projektów, praktyczne warsztaty praktyczne, mentoring z ekspertami z branży, 1- on-1 z mentorami branżowymi, ponad 400 godzin nauki i pomocy w pracy z najlepszymi firmami.

Przygotuj się na karierę przyszłości

AKTUALIZACJA I DYPLOM PG IIIT-BANGALORE W NAUCE O DANYCH
ZAREJESTRUJ SIĘ TERAZ @ AKTUALIZACJA