CodeBlanks Logo Icon CodeBlanks

Protocol

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

main.py
# Drawable protokolünü ve Circle sınıfını yaz

Örnek çözüm

main.py
# 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ı

Soru
from typing import Protocol, ____

@runtime_checkable
class Drawable(Protocol):
    def draw(self) -> str: ...
Cevap
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.

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