Sobes.tech
Middle

Ce face metoda new în contextul limbajului Python?

sobes.tech AI

Răspuns de la AI

__new__ - este o metodă de clasă responsabilă pentru crearea unei noi instanțe a clasei. Este apelată înainte de __init__ și determină ce obiect va fi returnat. Este folosită în principal pentru crearea de obiecte unice (Singleton) sau obiecte de tip imutabil (cum ar fi tuple sau str).

class Singleton:
    _instance = None

    def __new__(cls):
        # Verifică dacă deja există o instanță
        if cls._instance is None:
            # Dacă nu, o creează delegând crearea către clasa părinte (object)
            cls._instance = super().__new__(cls)
        # Returnează instanța existentă sau cea nou creată
        return cls._instance

# Exemple de utilizare
s1 = Singleton()
s2 = Singleton()

# Rezultatul așteptat: True
print(s1 is s2)

Compararea între __new__ și __init__:

  • __new__:

    • Metodă statică (primul argument este cls).
    • Este apelată înainte de crearea instanței.
    • Returnează instanța creată.
  • __init__:

    • Metodă de instanță (primul argument este self).
    • Este apelată după crearea instanței.
    • Nu returnează valori (returnează implicit None).
    • Este folosită pentru inițializarea atributelor obiectului creat.