Protocol
- Python kursu
- Orta seviye
- Ders 50/116
- 5 dk
typing.Protocol ile yapısal yazımı öğrenirsin.
Protocol ne işe yarar?
Protocol, yapısal yazım (structural typing) sağlar. Bir sınıf Protocol'ü miras almadan da, uygun metotlara sahipse o protokole uyuyor sayılır. typing modülünden içe aktarılır.
Örnek: class Drawable(Protocol):\n def draw(self) -> str: .... Herhangi bir sınıf draw metodu verdiğinde Drawable'a uyuyor sayılır; miras alması gerekmez. @runtime_checkable ile isinstance kontrolüne de izin verebilirsin.
@runtime_checkable
Bir protokolü isinstance ile kontrol edebilmek için @runtime_checkable süsleyicisi kullanılır. Bu süsleyici, protokolün yalnızca metot imzalarına bakarak uyumlu olup olmadığına karar verir.
Örnek: @runtime_checkable\nclass Speaker(Protocol):\n def speak(self) -> str: .... isinstance(obj, Speaker) çağrısı, obj üzerinde speak metodu varsa True döner. Bu, miras ilişkisi olmadan uyum kontrolü yapmanın en pratik yoludur.
Uygulama Drawable protokolü ve Circle
from typing import Protocol, runtime_checkable ile başla. @runtime_checkable ve class Drawable(Protocol): tanımla; içinde def draw(self) -> str: ... olsun. Sonra class Circle: sınıfını tanımla (miras yok); gövdede def draw(self) -> str: ve return "daire" yaz. En son c = Circle() ile örnek oluştur ve print(isinstance(c, Drawable)) ile uyumu yazdır.
Başlangıç kodu
# Drawable protokolünü ve Circle sınıfını yazÖrnek çözüm
# Drawable protokolünü ve Circle sınıfını yaz
from typing import Protocol, runtime_checkable
@runtime_checkable
class Drawable(Protocol):
def draw(self) -> str: ...
class Circle:
def draw(self) -> str:
return "daire"
c = Circle()
print(isinstance(c, Drawable))Beklenen çıktı
True
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Protocol parçalarını eşleştir
| Kavram | Anlamı |
|---|---|
Protocol |
Taban sınıf |
typing |
Modül |
@runtime_checkable |
isinstance izni |
def draw(self) |
Beklenen metot |
2 Protocol'e uymak için ne gerekir?
- Uygun metotlara sahip olmak Doğru cevap
- Soyut metot doldurmak
- ABC mirası almak
- Miras almak
Açıklama: Protocol, uygun metotlara sahip olmayı yeterli sayar; miras gerekmez.
3 Protocol import satırı
from typing import Protocol, ____
@runtime_checkable
class Drawable(Protocol):
def draw(self) -> str: ...
from typing import Protocol, runtime_checkable
@runtime_checkable
class Drawable(Protocol):
def draw(self) -> str: ...
Açıklama: runtime_checkable typing modülünden alınır.