Polimorfizm OOP Python programlamada en çok kullanılan nesne yönelimli programlama kavramlarından biridir. Aynı arayüzün farklı nesneler tarafından farklı biçimlerde uygulanmasını sağlar. **Polimorfizm Nedir?** Kelime olarak "çok biçimlilik" anlamına gelir. Programlamada aynı metodun, farklı sınıflarda farklı davranışlar sergilemesi demektir. Bunu gerçek hayattan bir örnekle anlamak kolaydır: Hem köpek hem kedi hem de kuş "ses çıkar" ama her biri bunu farklı şekilde yapar. **Yöntem Geçersiz Kılma (Method Overriding)** En yaygın polimorfizm biçimi, alt sınıfın üst sınıftan miras aldığı bir metodu yeniden tanımlamasıdır: ```python class Hayvan: def ses_cikar(self): return "..." class Kopek(Hayvan): def ses_cikar(self): return "Hav!" class Kedi(Hayvan): def ses_cikar(self): return "Miyav!" hayvanlar = [Kopek(), Kedi()] for h in hayvanlar: print(h.ses_cikar()) ``` Çıktı: ``` Hav! Miyav! ``` Farklı türde nesnelere aynı mesajı gönderiyoruz (`ses_cikar()`), her biri kendi davranışıyla yanıt veriyor. Bu polimorfizm OOP Python uygulamasının özüdür. **Duck Typing ile Polimorfizm** Python'da sınıf hiyerarşisi zorunlu değildir. "Eğer ördek gibi yürüyorsa ve ördek gibi ses çıkarıyorsa, o bir ördektir." mantığıyla çalışır: ```python class Kare: def alan(self): return 4 * 4 class Daire: def alan(self): return 3.14 * 3 * 3 def toplam_alan(sekiller): return sum(s.alan() for s in sekiller) print(toplam_alan([Kare(), Daire()])) ``` `Kare` ve `Daire` aynı üst sınıftan türememiştir; ancak her ikisi de `alan()` metoduna sahip olduğu için fonksiyon her ikisiyle çalışır. **Soyut Sınıflar ile Arayüz Tanımlama** Alt sınıfların belirli metodları uygulamasını zorlamak için soyut sınıflar kullanılır: ```python from abc import ABC, abstractmethod class Sekil(ABC): @abstractmethod def alan(self): pass class Dikdortgen(Sekil): def alan(self): return 5 * 3 ``` `Sekil` sınıfından türetilen ama `alan()` tanımlamayan bir sınıf oluşturulmaya çalışıldığında Python hata verir. **Ne Zaman Kullanmalısınız?** Polimorfizm OOP Python uygulamasında şu durumlarda özellikle faydalıdır: - Farklı nesne türlerini aynı koleksiyonda tutmak - Kod tekrarını azaltmak - Yeni türler eklendiğinde mevcut kodu değiştirmemek Polimorfizmi öğrenmenin en iyi yolu küçük örneklerle pratik yapmaktır. Bir hayvan hiyerarşisi veya geometrik şekiller üzerinde deneme yaparak başlayabilirsiniz.