Ebben az oktatóanyagban megismerhetjük a polimorfizmust, a polimorfizmus különböző típusait és azt, hogy miként valósíthatjuk meg azokat a Pythonban példák segítségével.
Mi a polimorfizmus?
A polimorfizmus szó szerinti jelentése a különböző formákban való előfordulás feltétele.
A polimorfizmus nagyon fontos fogalom a programozásban. Ez egyetlen típusú entitás (metódus, operátor vagy objektum) használatára utal, hogy különböző típusokat képviseljen különböző forgatókönyvekben.
Vegyünk egy példát:
1. példa: Polimorfizmus mellett operátor
Tudjuk, hogy az +
operátort széles körben használják a Python programokban. De nincs egyetlen felhasználása.
Egész szám adattípusok esetén az +
operátort számtani összeadási műveletek végrehajtására használják.
num1 = 1 num2 = 2 print(num1+num2)
Ezért a fenti program kimeneti 3.
Hasonlóképpen, a string adattípusoknál az +
operátort használják az összefűzés végrehajtására.
str1 = "Python" str2 = "Programming" print(str1+" "+str2)
Ennek eredményeként a fenti program kimeneti Python programozást.
Itt láthatjuk, hogy egyetlen operátort +
alkalmaztak különböző műveletek végrehajtására különböző adattípusok esetében. Ez a polimorfizmus egyik legegyszerűbb előfordulása a Pythonban.
Funkció polimorfizmus a Pythonban
A Pythonban vannak olyan funkciók, amelyek kompatibilisek több adattípussal történő futtatáshoz.
Az egyik ilyen funkció a len()
függvény. Sok adattípussal futtatható a Pythonban. Nézzünk meg néhány példát a függvény használatára.
2. példa: Polimorf len () függvény
print(len("Programiz")) print(len(("Python", "Java", "C"))) print(len(("Name": "John", "Address": "Nepal")))
Kimenet
9 3 2
Itt láthatjuk, hogy sok adattípus, például karaktersorozat, lista, páros, készlet és szótár működhet a len()
függvénnyel. Láthatjuk azonban, hogy konkrét információkat ad vissza az adott adattípusokról.

Osztályú polimorfizmus a Pythonban
A polimorfizmus nagyon fontos fogalom az objektum-orientált programozásban.
Ha többet szeretne megtudni az OOP-ról a Pythonban, keresse fel a következő címet: Python Object-Oriented Programming
Használhatjuk a polimorfizmus fogalmát, miközben osztálymódszereket hozunk létre, mivel a Python lehetővé teszi, hogy a különböző osztályok azonos nevű módszerekkel rendelkezzenek.
Ezután később általánosíthatjuk ezeknek a módszereknek a hívását azáltal, hogy figyelmen kívül hagyjuk azt az objektumot, amelyikkel dolgozunk. Nézzünk meg egy példát:
3. példa: Polimorfizmus az osztálymódszerekben
class Cat: def __init__(self, name, age): self.name = name self.age = age def info(self): print(f"I am a cat. My name is (self.name). I am (self.age) years old.") def make_sound(self): print("Meow") class Dog: def __init__(self, name, age): self.name = name self.age = age def info(self): print(f"I am a dog. My name is (self.name). I am (self.age) years old.") def make_sound(self): print("Bark") cat1 = Cat("Kitty", 2.5) dog1 = Dog("Fluffy", 4) for animal in (cat1, dog1): animal.make_sound() animal.info() animal.make_sound()
Kimenet
Miau macska vagyok. A nevem Kitty. 2,5 éves vagyok. Miau kéreg kutya vagyok. A nevem Bolyhos. 4 éves vagyok. Ugat
Itt két osztályt hoztunk létre Cat
és Dog
. Hasonló felépítésűek és ugyanazok a módszernevek info()
és make_sound()
.
Azonban vegye figyelembe, hogy nem hoztunk létre közös szuperosztályt, és semmilyen módon nem kapcsoltuk össze az osztályokat. Akkor is bepakolhatjuk ezt a két különböző tárgyat egy kettőbe, és iterálhatunk rajta egy közös állati változó segítségével. A polimorfizmus miatt lehetséges.
Polimorfizmus és öröklődés
Like in other programming languages, the child classes in Python also inherit methods and attributes from the parent class. We can redefine certain methods and attributes specifically to fit the child class, which is known as Method Overriding.
Polymorphism allows us to access these overridden methods and attributes that have the same name as the parent class.
Let's look at an example:
Example 4: Method Overriding
from math import pi class Shape: def __init__(self, name): self.name = name def area(self): pass def fact(self): return "I am a two-dimensional shape." def __str__(self): return self.name class Square(Shape): def __init__(self, length): super().__init__("Square") self.length = length def area(self): return self.length**2 def fact(self): return "Squares have each angle equal to 90 degrees." class Circle(Shape): def __init__(self, radius): super().__init__("Circle") self.radius = radius def area(self): return pi*self.radius**2 a = Square(4) b = Circle(7) print(b) print(b.fact()) print(a.fact()) print(b.area())
Output
Circle I am a two-dimensional shape. Squares have each angle equal to 90 degrees. 153.93804002589985
Here, we can see that the methods such as __str__()
, which have not been overridden in the child classes, are used from the parent class.
A polimorfizmus miatt a Python tolmács automatikusan felismeri, hogy az fact()
objektum a
(négyzet osztály) metódusát felülírják. Tehát a gyermekosztályban definiáltat használja.
Másrészt, mivel a fact()
b objektum metódusát nem írják felül, a Parent Shape osztályból használják.

Megjegyzés : A módszer túlterhelése , több módszer létrehozása ugyanazzal a névvel, de különböző argumentumokkal, a Pythonban nem lehetséges.