__class_getitem__
- Python kursu
- Uzman
- Ders 4/47
- 5 dk
__class_getitem__ ile generic sınıfları öğrenirsin.
__class_getitem__ nedir?
__class_getitem__ bir sınıfın kendisinin alt simge almasını sağlar. Vector[int] yazınca Python Vector.__class_getitem__(int) çağırır.
Bu yöntem genellikle bir generic alias döndürür. Python 3.12'de type zaten bunu destekler; kendi sınıflarında da ekleyebilirsin. Dönüş değeri bir dize, demet veya types.GenericAlias olabilir. Böylece tip ipuçları ve jenerik API'ler doğal görünür.
Generic alias döndürmek
__class_getitem__'in dönüş değeri özgürsün. En yaygın seçenek f"{cls.__name__}[{item.__name__}]" gibi bir dize döndürmektir; bu, hata ayıklama ve günlükleme için okunaklıdır.
Daha resmi bir yaklaşım types.GenericAlias(cls, item) kullanmaktır. Bu, list[int]'in döndürdüğü türle aynıdır ve tip denetleyicileriyle uyumludur. Hangisini seçeceğin, aracını tip sistemine mi yoksa yalnızca görüntülemeye mi hizmet ettiğine bağlıdır.
Uygulama Vector sınıfına __class_getitem__ ekle
Bir Vector sınıfı yaz. __class_getitem__(cls, item) yöntemi ekle ve f"{cls.__name__}[{item.__name__}]" dizesini döndürsün. Vector[int] çağrısının sonucunu yazdır.
Başlangıç kodu
# Vector sınıfına __class_getitem__ ekle
# alt simge çağrısını yazdırÖrnek çözüm
# Vector sınıfına __class_getitem__ ekle
class Vector:
def __class_getitem__(cls, item):
return f"{cls.__name__}[{item.__name__}]"
print(Vector[int])Beklenen çıktı
Vector[int]
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Class[key] ne çağırır?
class Vector:
def __class_getitem__(cls, item):
return item
print(Vector[int])- __class_getitem__(cls, key) Doğru cevap
- type(key)
- __init__(key)
- __getitem__(self, key)
Açıklama: Sınıf düzeyinde alt simge bu yöntemi çağırır.
2 __class_getitem__ tanımını tamamla
def __class_getitem__(cls, ____):
return f"Vector[{item.__name__}]"
def __class_getitem__(cls, item):
return f"Vector[{item.__name__}]"
Açıklama: item parametresi köşeli parantezin içindeki değeri alır.
3 __class_getitem__ kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
__class_getitem__ |
Sınıf alt simgesi |
cls |
Sınıf kendisi |
item |
Köşeli parantezin içi |
GenericAlias |
Resmi tür |