CodeBlanks Logo Icon CodeBlanks

type()

type() ile dinamik sınıf oluşturmayı öğrenirsin.

type() ile dinamik sınıf

type() tek argümanla bir nesnenin türünü verir. Üç argümanla ise yeni sınıf oluşturur: type(isim, tabanlar, sözlük).

isim sınıf adı, tabanlar üst sınıfların demeti, sözlük özellik ve yöntemlerin haritasıdır. Sonuç, class ile yazılmış gibi çalışır. Böylece yapıyı veriden üretirsin; örneğin bir ayar dosyasından sınıflar türetebilirsin.

Sözlük argümanı

Üçüncü argüman olan sözlük, sınıfın ad alanını belirler. "x": 0 gibi girdiler örnek özellikleri, "show": lambda self: ... gibi girdiler yöntemleri tanımlar.

Yöntemlerin ilk parametresi self olur. Sözlüğe __init__ de ekleyebilirsin; böylece dinamik sınıfın kurucusu olur. Bu esneklik, class deyimiyle yazılabilecek her şeyi çalışma anında kurmanı sağlar.

Uygulama Point sınıfını type() ile yaz

Point sınıfını type() ile oluştur. İkinci argüman boş demet (), üçüncü argüman sözlük olsun. Sözlükte x ve y özellikleri (değer 0) ve show yöntemi olsun. show şunu döndürsün: f"{self.x},{self.y}". Örnek oluştur, x=3 ve y=4 ata, show() çıktısını yazdır.

Başlangıç kodu

main.py
# Point sınıfını dinamik olarak oluştur
# x, y özellikleri ve show yöntemi ekle
# örneği yazdır

Örnek çözüm

main.py
# Point sınıfını dinamik olarak oluştur
Point = type("Point", (), {
    "x": 0,
    "y": 0,
    "show": lambda self: f"{self.x},{self.y}",
})
p = Point()
p.x = 3
p.y = 4
print(p.show())

Beklenen çıktı

3,4

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 type("X", (), {}) ne döndürür?

main.py
cls = type("X", (), {})
  • Bir hata fırlatır
  • Boş bir nesne
  • Yeni bir sınıf nesnesi Doğru cevap
  • type nesnesinin kendisi

Açıklama: type üç argümanla yeni bir sınıf oluşturur ve döndürür.

2 type() çağrısını tamamla

Soru
Point = type("Point", (), {____, "y": 0})
Cevap
Point = type("Point", (), {"x": 0, "y": 0})

Açıklama: Sözlükte anahtar-değer çifti "x": 0 olur.

3 type() kavramlarını eşleştir

Kavram Anlamı
type Sınıf oluşturur
isim Sınıf adı
tabanlar Üst sınıf demeti
sözlük Özellik haritası

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