EMZETT.
Giriş yap

Python’da tür ek açıklamaları: type hint’ler ve mypy

Kısaca: Type hint’ler işlevlerin hangi türleri beklediğini ve döndürdüğünü tanımlar; Python bunları kendisi denetlemez, ancak düzenleyiciler ve mypy gibi araçlar çalıştırmadan önce hataları bulur.

Biraz daha ayrıntılı: Python dinamik tiplidir: türler çalışma zamanında belirlenir. Python 3.5’ten beri tür ek açıklamaları belirtebilirsin. Bunlar belge ve denetim yardımıdır ancak çalışma zamanı davranışını değiştirmez.

Ayrıntılı

Temeller

def greet(name: str, count: int = 1) -> str:
    return ("Hello " + name + "! ") * count
prices: dict[str, float] = {"Game": 12.5}
names: list[str] = []
coordinate: tuple[int, int] = (3, 4)

3.9/3.10’dan modern gösterim: list[int], dict[str, int], int | None (Optional[int] yerine), birleşimler için X | Y. None dönüşleri: -> None. Dönüşü olmayan işlevler için -> any kullanma.

Yararlı türler

  • Optional[T] / T | None: değer veya hiçbir şey.
  • Union, Literal["a", "b"], Any (denetimi kapatır).
  • İşlevler için Callable[[int], str], Iterable, Sequence, Mapping.
  • TypedDict, NamedTuple, dataclass, Protocol (denetimli yapısal tipleme/“duck typing”).
  • Genel işlevler/sınıflar için Generic/TypeVar: def first(xs: list[T]) -> T.
  • Final, ClassVar, Self, override.
  • Tür takma adları: Price = float, type Point = tuple[int, int] (3.12).

mypy/pyright ile denetim

pip install mypy
mypy my_file.py

mypy --strict katıdır; adım adım getir (kademeli tipleme). Düzenleyiciler (Pylance/pyright ile VS Code, PyCharm) hataları canlı gösterir. Örnek: greet(5), program çalışmadan önce “argument 1 has incompatible type int; expected str” bildirir. CI’da çalıştır. Türsüz kütüphaneler: types-… paketleri (stub’lar). # type: ignore’u idareli kullan.

Faydalar ve sınırlar

  • Avantajlar: daha az hata (None hataları!), daha iyi otomatik tamamlama, okunabilirlik, yeniden düzenleme güvenliği; FastAPI/pydantic gibi çerçevelerin temeli (türler çalışma zamanında doğrulama için kullanılır).
  • Sınırlar: çalışma zamanı hiçbir şeyi denetlemez; yanlış bir ek açıklama yalan söyler; çok dinamik kodu tiplemek zordur.
  • Uygulama: genel işlevleri ve arayüzleri açıkla, küçük dahili betikleri mutlaka değil.
  • Karşılaştırma: TypeScript (JS), Java/C# (statik) – Python isteğe bağlı tiplidir.
  • Sınav/öğrenme: tür hatalarını çalıştırmadan önce bul; mypy’de reveal_type(x) ile kontrol et.

Ayrıca bak: TypeScript, Linter’lar, biçimlendiriciler ve tür denetleyiciler