Konuya giriş: Type hints, Python 3.5'te (PEP 484) kodun statik analizini, otomatik tamamlama, yeniden yapılandırma ve otomatik belgeleri desteklemek için ortaya çıktı. Önceden Python, katı tip kullanmadan başarılı bir şekilde çalışabiliyordu, ancak projelerin ve ekiplerin büyümesiyle, kod kalitesini artırmak için bunlar gerekli hale geldi.
Sorun: Tip anotasyonları, geliştiricilere ve dış araçlara (mypy, Pyright vb.) yönelik sadece ipuçlarıdır, yorumlayıcı bunları çalıştırma sırasında yok sayar. Hatalar genellikle şu durumlarda ortaya çıkar:
Çözüm: Fonksiyonlar ve değişkenler için okuma kolaylığı, kod analizi için linters ve IDE'ler için tip anotasyonlarını kullanın. Sadece anotasyonlara güvenmemek gerekir; bir statik tip kontrol aracı da gereklidir. Örnek:
def greeting(name: str) -> str: return f"Hello, {name}" def sum_nums(nums: list[int]) -> int: return sum(nums)
Daha karmaşık örnekler typing modülünü kullanır:
from typing import List, Dict, Optional def process(data: List[Dict[str, Optional[int]]]) -> None: ...
Anahtar özellikler:
Python yorumlayıcısı, çalıştırma aşamasında anotasyonlardaki türleri işler mi?
Hayır. Anotasyonlar __annotations__ üzerinden erişilebilir, ancak çalışma sırasında davranışı kontrol etmez.
Anotasyonlu fonksiyonlarda anotasyonsuz değişkenler kullanılabilir mi?
Evet. Anotasyonlar zorunlu değildir, ancak onların eksikliği kafa karıştırıcı olabilir.
Anotasyondan sonra bir değişkenin tipini yeniden tanımlamak mümkün mü?
Evet, ancak bu statik analizin amacını ihlal eder ve linters için sorun yaratır. Böyle bir durumdan kaçınmak daha iyidir:
x: int = 5 x = 'string' # Linter uyarı verecektir ama kod çalışacaktır.
Olumsuz durum: Bir fonksiyon anot edilmiş, ancak gerçekte anotasyonda belirtilenden farklı bir tip dönmektedir, fonksiyonun mantığındaki bir değişiklik nedeniyle. Artılar:
Olumlu durum: Tüm fonksiyonlar ve veriler anot edilmiş, proje CI/CD sırasında mypy ile kontrol edilmekte. Artılar: