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.pymypy --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