CodeBlanks Logo Icon CodeBlanks

Interface vs abstract

Soyut sınıf ve protocol farkını öğrenirsin.

Interface vs abstract

Python'da “interface” ve “abstract” ayrımı dil seviyesinde yoktur. ABC, miras yoluyla uyum zorunlu kılar; Protocol ise yapısal uyumla çalışır, miras istemez. İkisi de “şu metotlar olsun” şartını farklı yollarla sağlar.

ABC güçlü ve açık: alt sınıf ABC'yi miras almak zorunda. Protocol esnek: herhangi bir sınıf uygun metotları verirse uyumlu sayılır. Hangisini seçeceğin, mimarinin ne kadar sıkı olduğunu gösterir.

Ne zaman hangisi?

Ortak bir arayüzü zorunlu kılmak istiyorsan ABC seç: alt sınıfların hepsi aynı tabandan gelsin. Esnek bir “şu metot varsa yeter” yaklaşımı istiyorsan Protocol seç: dışarıdan gelen sınıflar da uyumlu sayılsın.

Örnek: kendi kitaplığında hayvan hiyerarşisi kuruyorsan ABC uygundur; kullanıcı sınıflarının da uyumlu sayılması gereken genel bir API tasarlıyorsan Protocol uygundur. İkisini birlikte de kullanabilirsin; mimari ihtiyacın belirler.

Uygulama ABC ve Protocol birlikte

from abc import ABC, abstractmethod ve from typing import Protocol, runtime_checkable ile başla. Animal(ABC) soyut sınıfını tanımla; içinde @abstractmethod ve def sound(self): ile pass olsun. @runtime_checkable ile class Speaker(Protocol): tanımla; içinde def speak(self) -> str: ... olsun. Sonra class Cat(Animal): tanımla; gövdede def sound(self): ile return "Miyav" ve def speak(self) -> str: ile return "miyav" yaz. En son c = Cat() ile örnek oluştur ve print(c.sound(), isinstance(c, Speaker)) ile yazdır.

Başlangıç kodu

main.py
# ABC ve Protocol'ü birlikte kullan

Örnek çözüm

main.py
# ABC ve Protocol'ü birlikte kullan
from abc import ABC, abstractmethod
from typing import Protocol, runtime_checkable

class Animal(ABC):
    @abstractmethod
    def sound(self):
        pass

@runtime_checkable
class Speaker(Protocol):
    def speak(self) -> str: ...

class Cat(Animal):
    def sound(self):
        return "Miyav"
    def speak(self) -> str:
        return "miyav"

c = Cat()
print(c.sound(), isinstance(c, Speaker))

Beklenen çıktı

Miyav True

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Hangi ifade doğrudur?

  • ABC miras ister, Protocol miras istemez Doğru cevap
  • ABC miras istemez, Protocol miras ister
  • İkisi de miras ister
  • İkisi de miras istemez

Açıklama: ABC miras ister, Protocol ise yapısal uyumla çalışır.

2 ABC miras satırı

Soru
from abc import ABC, abstractmethod

class Animal(____):
    @abstractmethod
    def sound(self):
        pass
Cevap
from abc import ABC, abstractmethod

class Animal(ABC):
    @abstractmethod
    def sound(self):
        pass

Açıklama: ABC mirası soyut sınıf tanımlar.

3 ABC ve Protocol farkını eşleştir

Kavram Anlamı
ABC Miras zorunlu
Protocol Yapısal uyum
@abstractmethod ABC süsleyicisi
@runtime_checkable Protocol süsleyicisi

Orta seviye bölümündeki tüm dersler