__slots__
- Python kursu
- Orta seviye
- Ders 22/116
- 4 dk
__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
# Point sınıfını __slots__ ile tanımlaÖrnek çözüm
# 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
class Point:
____ = ("x", "y")
class Point:
__slots__ = ("x", "y")
Açıklama: __slots__ çift alt çizgiyle başlar ve biter.