Bu eğitimde, polimorfizm, farklı polimorfizm türleri ve bunları örnekler yardımıyla Python'da nasıl uygulayabileceğimiz hakkında bilgi edineceğiz.
Polimorfizm nedir?
Polimorfizmin gerçek anlamı, farklı biçimlerde ortaya çıkma durumudur.
Çok biçimlilik, programlamada çok önemli bir kavramdır. Farklı senaryolarda farklı türleri temsil etmek için tek tür bir varlığın (yöntem, operatör veya nesne) kullanılmasını ifade eder.
Bir örnek alalım:
Örnek 1: Toplama operatöründe polimorfizm
+
Operatörün Python programlarında yoğun olarak kullanıldığını biliyoruz . Ancak tek bir kullanımı yoktur.
Tamsayı veri türleri için, +
aritmetik toplama işlemi gerçekleştirmek için operatör kullanılır.
num1 = 1 num2 = 2 print(num1+num2)
Dolayısıyla, yukarıdaki program 3 çıktısı verir.
Benzer şekilde, dize veri türleri için, +
birleştirme gerçekleştirmek için operatör kullanılır.
str1 = "Python" str2 = "Programming" print(str1+" "+str2)
Sonuç olarak, yukarıdaki program Python Programlama çıktısı verir.
Burada, +
farklı veri türleri için farklı işlemler gerçekleştirmek için tek bir operatörün kullanıldığını görebiliriz . Bu, Python'daki polimorfizmin en basit oluşumlarından biridir.
Python'da İşlev Polimorfizmi
Python'da birden çok veri türü ile çalışmak için uyumlu bazı işlevler vardır.
Böyle bir işlev, len()
işlevdir. Python'da birçok veri türü ile çalışabilir. İşlevin bazı örnek kullanım durumlarına bakalım.
Örnek 2: Polimorfik len () işlevi
print(len("Programiz")) print(len(("Python", "Java", "C"))) print(len(("Name": "John", "Address": "Nepal")))
Çıktı
9 3 2
Burada string, list, tuple, set ve dictionary gibi birçok veri türünün len()
fonksiyonla çalışabildiğini görebiliriz . Ancak, belirli veri türleri hakkında belirli bilgiler döndürdüğünü görebiliriz.

Python'da Sınıf Polimorfizmi
Çok biçimlilik, Nesne Tabanlı Programlamada çok önemli bir kavramdır.
Python'da OOP hakkında daha fazla bilgi edinmek için şu adresi ziyaret edin: Python Nesne Yönelimli Programlama
Python, farklı sınıfların aynı ada sahip yöntemlere sahip olmasına izin verdiğinden, sınıf yöntemleri oluştururken polimorfizm kavramını kullanabiliriz.
Daha sonra çalıştığımız nesneyi göz ardı ederek bu yöntemleri çağırmayı genelleştirebiliriz. Bir örneğe bakalım:
Örnek 3: Sınıf Yöntemlerinde Polimorfizm
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()
Çıktı
Miyav ben bir kediyim. Benim adım Kitty. 2,5 yaşındayım. Miyav Kabuğu Ben bir köpeğim. Benim adım Fluffy. 4 yaşındayım Bağırmak
Burada iki sınıf oluşturduk Cat
ve Dog
. Benzer bir yapıyı paylaşırlar ve aynı yöntem adlarına sahiptirler info()
ve make_sound()
.
Ancak, ortak bir üst sınıf oluşturmadığımıza veya sınıfları herhangi bir şekilde birbirine bağlamadığımıza dikkat edin. O zaman bile, bu iki farklı nesneyi bir demet halinde paketleyebilir ve ortak bir hayvan değişkeni kullanarak bunu yineleyebiliriz. Polimorfizm nedeniyle mümkündür.
Çok Biçimlilik ve Kalıtım
Diğer programlama dillerinde olduğu gibi, Python'daki alt sınıflar da üst sınıftan yöntemleri ve nitelikleri devralır. Belirli yöntemleri ve nitelikleri özellikle alt sınıfa uyacak şekilde yeniden tanımlayabiliriz, bu da Metodu Geçersiz Kılma olarak bilinir .
Çok biçimlilik, bu geçersiz kılınmış yöntemlere ve ana sınıfla aynı ada sahip özniteliklere erişmemize izin verir.
Bir örneğe bakalım:
Örnek 4: Yöntemi Geçersiz Kılma
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())
Çıktı
Daire Ben iki boyutlu bir şeklim. Karelerin her açısı 90 dereceye eşittir. 153.93804002589985
Burada __str__()
alt sınıflarda geçersiz kılınmayan gibi yöntemlerin üst sınıftan kullanıldığını görebiliriz.
Polimorfizm nedeniyle, Python yorumlayıcısı fact()
nesne yönteminin a
(Square sınıfı) geçersiz kılındığını otomatik olarak tanır . Yani, alt sınıfta tanımlananı kullanır.
Öte yandan, fact()
b nesnesinin yöntemi geçersiz kılınmadığı için, Parent Shape sınıfından kullanılır.

Not : Metot Aşırı Yüklemesi , aynı adla ancak farklı argümanlarla birden çok yöntem oluşturmanın bir yolu, Python'da mümkün değildir.