CodeBlanks Logo Icon CodeBlanks

Singleton

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)  # True

Bu 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._instance

super().__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

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

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

Soru
class Singleton:
    _instance = None
    def __new__(cls):
        if cls._instance is None:
            cls._instance = super().____(cls)
        return cls._instance
Cevap
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

İleri seviye bölümündeki tüm dersler