Interface vs abstract
- Python kursu
- Orta seviye
- Ders 51/116
- 4 dk
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
# ABC ve Protocol'ü birlikte kullanÖrnek çözüm
# 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ı
from abc import ABC, abstractmethod
class Animal(____):
@abstractmethod
def sound(self):
pass
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 |