CodeBlanks Logo Icon CodeBlanks

__class_getitem__

__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

main.py
# Vector sınıfına __class_getitem__ ekle
# alt simge çağrısını yazdır

Örnek çözüm

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

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

Soru
def __class_getitem__(cls, ____):
    return f"Vector[{item.__name__}]"
Cevap
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

Uzman bölümündeki tüm dersler