CodeBlanks Logo Icon CodeBlanks

__slots__

__slots__ ile bellek tasarrufunu öğrenirsin.

__slots__ özniteliği

__slots__, bir sınıfın sahip olabileceği öznitelik adlarını bir demet (tuple) olarak kısıtlar. Bu, bellek tasarrufu sağlar ve yanlışlıkla yeni öznitelik eklenmesini engeller.

Örnek: class Point:\n __slots__ = ("x", "y"). Artık p.x ve p.y yazılabilir; p.z = 3 yazımı AttributeError fırlatır. Bu, kapsüllemeyi güçlendirir; sınıf düzeni sabit kalır. Çok sayıda örnek oluşturulduğunda bellek kazancı anlamlı olur.

Bellek ve düzen

__slots__ kullanılan sınıflarda her örnek bir __dict__ taşımaz; bu, bellek ayak izini küçültür. Binlerce örnek oluşturulduğunda fark belirginleşir.

Örnek: class Point:\n __slots__ = ("x", "y")\n def __init__(self, x, y):\n self.x = x\n self.y = y. p = Point(3, 4) örneği yalnızca x ve y taşır. p.z = 5 yazımı hata verir. Düzen sabittir; yeni ad eklenemez.

Uygulama Point sınıfına __slots__ ekle

Point adında bir sınıf tanımla. Gövdeye __slots__ = ("x", "y") ekle. def __init__(self, x, y): metodu ekle ve gövdede self.x = x ve self.y = y yaz. Sonra p = Point(3, 4) ile örnek oluştur ve print(p.x + p.y) çağrısı yap.

Başlangıç kodu

main.py
# Point sınıfını __slots__ ile tanımla

Örnek çözüm

main.py
# Point sınıfını __slots__ ile tanımla
class Point:
    __slots__ = ("x", "y")
    def __init__(self, x, y):
        self.x = x
        self.y = y

p = Point(3, 4)
print(p.x + p.y)

Beklenen çıktı

7

Soru ve cevaplar

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

1 __slots__ kavramlarını eşle

Kavram Anlamı
__slots__ Öznitelik kısıtı
("x", "y") İzinli adlar
AttributeError Yeni ad engeli

2 __slots__ ne yapar?

  • Yeni metot ekler
  • Öznitelik kümesini sınırlar Doğru cevap
  • Sınıfı siler
  • Sınıf değişkenlerini kaldırır

Açıklama: __slots__ yalnızca listedeki adların kullanılmasına izin verir.

3 __slots__ bildirimini tamamla

Soru
class Point:
    ____ = ("x", "y")
Cevap
class Point:
    __slots__ = ("x", "y")

Açıklama: __slots__ çift alt çizgiyle başlar ve biter.

Orta seviye bölümündeki tüm dersler