Python
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.
Örnek çözümü göster
# 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))
Kendini test et
-
Hangi ifade doğrudur?
- ABC miras ister, Protocol miras istemez
- ABC miras istemez, Protocol miras ister
- İkisi de miras ister
- İkisi de miras istemez
Cevabı göster
ABC miras ister, Protocol miras istemez — ABC miras ister, Protocol ise yapısal uyumla çalışır.
-
ABC miras satırı
from abc import ABC, abstractmethod
class Animal(____):
@abstractmethod
def sound(self):
pass
Cevabı göster
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def sound(self):
pass
-
ABC ve Protocol farkını eşleştir
- ABC
- Miras zorunlu
- Protocol
- Yapısal uyum
- @abstractmethod
- ABC süsleyicisi
- @runtime_checkable
- Protocol süsleyicisi
Sıradaki ders: Özet - Soyut sınıflar