Python'da Polimorfizm (Örneklerle)

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 len () işlevindeki polimorfizm

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 Catve 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.

Python'da üst ve alt sınıflarda çok biçimlilik

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.

Ilginç makaleler...