Python OOP Polimorfizmi: Ördek Yazma ve Arayüzler
Python'da çokbiçimliliğe hakim olun. Ördek yazımı, yöntem geçersiz kılma ve soyut temel sınıfları kullanarak esnek, gevşek bağlantılı kod yazmayı öğrenin.
Genel Bakış
Polimorfizm, "birçok form" anlamına gelen Yunanca bir terimdir. Nesneye Dayalı Programlamada, farklı sınıfların aynı yöntem çağrısına kendilerine özgü bir şekilde yanıt verme yeteneğini ifade eder. Polimorfizm, ortak bir arayüzü paylaşmaları koşuluyla birçok farklı nesne türünü işleyebilen tek bir işlev yazmanıza olanak tanır. Bu, düşük bağlantıya olanak tanır ve yazılım sistemlerinizin son derece uyarlanabilir ve genişletilebilir olmasını sağlar.
Python'da polimorfizm, Duck Typing olarak bilinen bir kavrama derinden bağlıdır. Terim şu ifadeden gelir: "Ördek gibi yürüyorsa ve ördek gibi vaklıyorsa, o zaman ördek olmalı." Dinamik olarak yazılan Python'da bir işlev, bir nesnenin hangi sınıfa ait olduğuyla ilgilenmez; yalnızca o nesnenin istenen yöntemleri uygulayıp uygulamadığıyla ilgilenir. Örneğin, ".speak()" öğesini çağıran bir işleviniz varsa, bunu bir Köpek, Kedi veya Robot olarak iletebilirsiniz; bunların hepsinde bir ".speak()" yöntemi olduğu sürece kod mükemmel şekilde çalışır.
Daha katı mimariler için Python, yerleşik 'abc' modülü aracılığıyla Soyut Temel Sınıflar (ABC'ler) sağlar. 'abc.ABC'den miras alarak ve '@abstractmethod' dekoratörünü kullanarak, alt sınıfların uygulamaya zorlandığı resmi arayüzleri tanımlayabilirsiniz. Eğer bir alt sınıf soyut yöntemleri tanımlamada başarısız olursa, Python onu başlatmaya çalıştığınızda bir TypeError hatası verecektir. Esnek ördek yazımını resmi soyut sınıflarla dengelemek, esnek Python kitaplıkları tasarlamak için önemli bir beceridir.
Kod ve Yürütme Çıkışı
Alanlarını hesaplayan şekilleri temsil eden polimorfik sınıfların uygulanması.
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
"""Must be implemented by subclasses."""
pass
class Square(Shape):
def __init__(self, side):
self.side = side
def area(self):
return self.side * self.side
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
import math
return math.pi * (self.radius ** 2)
# Polymorphic function accepting any Shape
def print_area(shape: Shape):
print(f"Calculated Area: {shape.area():.2f}")
print_area(Square(4))
print_area(Circle(3))Calculated Area: 16.00
Calculated Area: 28.27Adım Adım Uygulama
- CreditCard, PayPal ve Stripe nesnelerini işleyen ödeme işlemcileri yazma
- Birleşik bir işleme döngüsü kullanarak çeşitli öğelerin (Metin, Resim) çizilmesi
- Birim testi sırasında harici API bağlantılarının taklit edilmesi
Sıkça Sorulan Sorular
Ördek Yazma Nedir?
Python'un polimorfizme dinamik yaklaşımıdır. Belirli bir üst sınıftan mirası doğrulamak yerine, çalışma zamanında yöntemlerin ve özelliklerin varlığını kontrol eder.
Bir Soyut Temel Sınıfı başlatabilir misiniz?
Hayır. ABC'den miras alan ve soyut yöntemler içeren bir sınıfın örneğini oluşturmaya çalışmak TypeError hatasına yol açacaktır.
İlgili Konular
Python sınıflarına, nesnelerine, kalıtımına ve OOP kavramlarına eksiksiz bir giriş. Sağlam veri modelleri oluşturun ve python uygulamalarınızı ölçeklendirin.
Python OOP MirasıPython OOP'ta kalıtımı öğrenin. Alt sınıflandırma, geçersiz kılma yöntemleri, super() kullanımı ve çoklu kalıtım kalıplarında uzmanlaşın.
Önerilen Python Kaynakları
İlgili etkileşimli eğitimler, yardımcı sayfalar ve kod karşılaştırmalarıyla bilginizi genişletin.
Python'da Liste Nasıl Sıralanır
Python'da sort() yöntemini ve sorted() işlevini kullanarak bir listeyi nasıl sıralayacağınızı öğrenin. Özel anahtar sıralama ve ters sıralama örneklerini keşfedin.
Python String Yöntemleri Hile Sayfası
Python dize manipülasyonu için eksiksiz bir başvuru kılavuzu. Dize özelliklerini biçimlendirme, arama, bölme, değiştirme ve denetleme konusunda uzmanlaşın.
Python vs JavaScript: Hangi Programlama Dili En İyisidir?
Python ve JavaScript arasında kapsamlı bir karşılaştırma. Sözdizimi farklılıklarını, performansı, kullanım örneklerini (arka uç ve ön uç) ve kodlama örneklerini keşfedin.