Singleton
- Python kursu
- İleri seviye
- Ders 61/83
- 5 dk
Singleton desenini Python'da yazmayı öğrenirsin.
Singleton
Singleton, bir sınıftan yalnızca bir örnek oluşturulmasını sağlar. __new__ metodunu ezerek ilk çağrıda örneği saklar, sonraki çağrılarda aynı örneği döndürür.
class Singleton:
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instance
a = Singleton()
b = Singleton()
print(a is b) # TrueBu desen, yapılandırma, bağlantı havuzu veya günlükleyici gibi tek olması gereken nesneler için kullanılır.
__new__ metodu
__new__, bir sınıfın yeni örneğini oluşturan metottur. __init__'ten önce çağrılır. Singleton'da cls._instance None ise super().__new__(cls) ile örnek oluşturur ve saklar.
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instancesuper().__new__(cls) asıl örneği oluşturur; biz sadece bunu bir kez yapıp saklarız.
Uygulama Singleton sınıfı yaz
class Singleton: tanımla. _instance = None sınıf özniteliği ekle. def __new__(cls): metodu yaz: if cls._instance is None: cls._instance = super().__new__(cls), sonra return cls._instance. a = Singleton() ve b = Singleton() ile iki örnek oluştur. print(a is b) ile aynı nesne mi yazdır.
Başlangıç kodu
# Singleton sınıfını tanımla
# örnek saklamak için bir sınıf özniteliği ekle (başlangıçta None)
# __new__ metodunu yaz: örnek yoksa üst sınıfın __new__'u ile oluştur ve sakla
# iki örnek oluştur ve aynı nesne mi yazdırÖrnek çözüm
class Singleton:
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instance
a = Singleton()
b = Singleton()
print(a is b)Beklenen çıktı
True
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Singleton deseninde ikinci çağrı ne döndürür?
- Hata fırlatır
- Yeni bir örnek
- Hiçbir şey
- Aynı örneği Doğru cevap
Açıklama: Singleton ikinci çağrıda sakladığı örneği döndürür.
2 __new__ gövdesini tamamla
class Singleton:
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super().____(cls)
return cls._instance
class Singleton:
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instance
Açıklama: super().__new__(cls) asıl örneği oluşturur.
3 Singleton kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
_instance |
Örneği saklar |
__new__ |
Örneği oluşturur |
super().__new__ |
Asıl örneği yapar |
a is b |
Aynı nesne demektir |