Polymorfismus v Python s PŘÍKLADY
Co je to polymorfismus?
Polymorfismus lze definovat jako stav, který se vyskytuje v mnoha různých formách. Je to koncept v Python programování, ve kterém je objekt definovaný v Python lze použít různými způsoby. Umožňuje programátorovi definovat více metod v odvozené třídě a má stejný název jako v nadřazené třídě. Takové scénáře podporují přetížení metod Python.
Polymorfismus v Operatorů
Operátor v Python pomáhá provádět matematické a několik dalších programovacích úloh. Například operátor '+' pomáhá při sčítání mezi dvěma celočíselnými typy v Python, a stejným způsobem stejný operátor pomáhá při zřetězení řetězců v Python programování.
Vezměme si příklad + (plus) operátor v Python k zobrazení aplikace polymorfismu v Python jak je uvedeno níže:
Python Kód:
p = 55 q = 77 r = 9.5 g1 = "Guru" g2 = "99!" print("the sum of two numbers",p + q) print("the data type of result is",type(p + q)) print("The sum of two numbers",q + r) print("the data type of result is", type (q + r)) print("The concatenated string is", g1 + g2) print("The data type of two strings",type(g1 + g2))
Výstup:
the sum of two numbers 132 the data type of result is <class 'int'> The sum of the two numbers 86.5 the data type of result is <class 'float'> The concatenated string is Guru99! The data type of two strings <class 'str'>
Výše uvedený příklad lze také považovat za příklad přetížení operátora.
Polymorfismus v uživatelsky definovaných metodách
Uživatelem definovaná metoda v Python programovací jazyk jsou metody, které uživatel vytváří a deklaruje se pomocí klíčového slova def s názvem funkce.
Polymorfismus v Python programovacího jazyka je dosaženo přetížením a přepsáním metody. Python definuje metody s klíčovým slovem def a se stejným názvem v podřízené i rodičovské třídě.
Vezměme si následující příklad, jak je ukázáno níže: –
Python Kód:
from math import pi class square: def __init__(self, length): self.l = length def perimeter(self): return 4 * (self.l) def area(self): return self.l * self.l class Circle: def __init__(self, radius): self.r = radius def perimeter(self): return 2 * pi * self.r def area(self): return pi * self.r * * 2 # Initialize the classes sqr = square(10) c1 = Circle(4) print("Perimeter computed for square: ", sqr.perimeter()) print("Area computed for square: ", sqr.area()) print("Perimeter computed for Circle: ", c1.perimeter()) print("Area computed for Circle: ", c1.area())
Výstup:
Perimeter computed for square: 40 Area computed for square: 100 Perimeter computed for Circle: 25.132741228718345 Area computed for Circle: 50.26548245743669
Ve výše uvedeném kódu jsou dvě uživatelem definované metody, obvod a plocha, definované v kruhových a čtvercových třídách.
Jak je ukázáno výše, jak třída kruh, tak třída čtverec vyvolávají stejný název metody zobrazující charakteristiku polymorfismu, aby poskytl požadovaný výstup.
Polymorfismus ve funkcích
Vestavěné funkce v Python jsou navrženy a kompatibilní pro provádění několika typů dat. V Python, Len()
je jednou z klíčových vestavěných funkcí.
Funguje na několika typech dat: seznam, n-tice, řetězec a slovník. Funkce Len () vrací určité informace zarovnané s těmito mnoha datovými typy.
Následující obrázek ukazuje, jak lze použít polymorfismus Python ve vztahu k vestavěným funkcím: –
Následující program pomáhá při ilustraci aplikace polymorfismu v Python: -
Python Kód:
print ("The length of string Guru99 is ",len("Guru99")) print("The length of list is ",len(["Guru99","Example","Reader"])) print("The length of dictionary is ",len({"Website name":"Guru99","Type":"Education"}))
Výstup:
The length of string Guru99 is 6 The length of the list is 3 The length of the dictionary is 2
Ve výše uvedeném příkladu funkce Len () of Python provádí polymorfismus pro datové typy řetězců, seznamů a slovníků.
Polymorfismus a dědičnost
Dědictví v Python lze definovat jako koncept programování, ve kterém podřízená třída definovala vlastnosti z jiné základní třídy přítomné v Python.
Klíčové jsou dva Python koncepty nazývané overriding metody a přetížení metody.
- Při přetížení metody, Python poskytuje funkci vytváření metod, které mají stejný název pro provádění nebo provádění různých funkcí v daném kusu kódu. Umožňuje přetěžovat metody a používá je k provádění různých úkolů v jednodušších termínech.
- V přepisování metody Python přepíše hodnotu, která sdílí podobný název v nadřazených a podřízených třídách.
Vezměme si následující příklad polymorfismu a dědičnosti, jak je ukázáno níže: –
Python Kód:
class baseclass: def __init__(self, name): self.name = name def area1(self): pass def __str__(self): return self.name class rectangle(baseclass): def __init__(self, length, breadth): super().__init__("rectangle") self.length = length self.breadth = breadth def area1(self): return self.length * self.breadth class triangle(baseclass): def __init__(self, height, base): super().__init__("triangle") self.height = height self.base = base def area1(self): return (self.base * self.height) / 2 a = rectangle(90, 80) b = triangle(77, 64) print("The shape is: ", b) print("The area of shape is", b.area1()) print("The shape is:", a) print("The area of shape is", a.area1())
Výstup:
The shape is: a triangle The area of a shape is 2464.0 The shape is: a rectangle The area of a shape is 7200
Ve výše uvedeném kódu mají metody stejný název definovaný jako metoda init a metoda area1. Objekt třídy čtverec a obdélník se pak použije k vyvolání těchto dvou metod k provedení různých úkolů a poskytnutí výstupu oblasti čtverce a obdélníku.
Polymorfismus s třídními metodami
Jedno Python programování umožňuje programátorům dosáhnout polymorfismu a přetížení metod metodami tříd. Různé třídy v Python může mít metody, které jsou deklarovány pod stejným názvem napříč Python kód.
In Pythonlze definovat dvě různé třídy. Jedna by byla podřízená třída a odvozuje atributy z jiné definované třídy nazývané rodičovská třída.
Následující příklad ilustruje koncept polymorfismu s metodami tříd: –
Python Kód:
class amazon: def __init__(self, name, price): self.name = name self.price = price def info(self): print("This is product and am class is invoked. The name is {self.name}. This costs {self.price} rupees.") class flipkart: def __init__(self, name, price): self.name = name self.price = price def info(self): print(f "This is product and fli class is invoked. The name is {self.name}. This costs {self.price} rupees.") FLP = flipkart("Iphone", 2.5) AMZ = amazon("Iphone", 4) for product1 in (FLP, AMZ): product1.info()
Výstup:
This is a product, and fli class is invoked. The name is iPhone, and this costs 2.5 rupees. This is a product, and am class is invoked. The name is iPhone, and this costs 4 rupees.
Ve výše uvedeném kódu dvě různé třídy pojmenované jako flipkart a amazon používají stejné názvy metod info a init k poskytnutí příslušných cenových nabídek produktu a dále ilustrují koncept polymorfismu v Python.
Rozdíl mezi přetížením metody a polymorfismem v době kompilace
V polymorfismu v době kompilace je kompilátor Python program vyřeší hovor. Polymorfismus v době kompilace je dosažen přetížením metody.
Jedno Python kompilátor neřeší volání během běhu pro polymorfismus. Je také klasifikován jako metoda překrývající, kde stejné metody nesou podobné podpisy nebo vlastnosti, ale tvoří součást různých tříd.
Shrnutí
- Polymorfismus lze definovat jako stav, který se vyskytuje v mnoha různých formách.
- Operátor v Python pomáhá provádět matematické a několik dalších programovacích úloh.
- Uživatelem definovaná metoda v Python programovací jazyk jsou metody, které uživatel vytváří a deklaruje se pomocí klíčového slova def s názvem funkce.
- Polymorfismus v Python nabízí několik žádoucích vlastností, jako je podpora opětovné použitelnosti kódů napsaných pro různé třídy a metody.
- Podřízená třída je odvozená třída a získává své atributy z nadřazené třídy.
- Polymorfismu je také dosaženo pomocí přepisování metody za běhu a přetěžování metody v době kompilace.
- Polymorfismus v Python je také dosaženo pomocí přetěžování operátorů a metod tříd.