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.

Editör'de deneyin

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

polymorphism_demo.py
Editör'de deneyin
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))
Terminal Çıkışı
Calculated Area: 16.00
Calculated Area: 28.27

Adı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

Önerilen Python Kaynakları

İlgili etkileşimli eğitimler, yardımcı sayfalar ve kod karşılaştırmalarıyla bilginizi genişletin.