Sobes.tech
Middle

Cosa fa il metodo new nel contesto del linguaggio Python?

sobes.tech AI

Risposta dell'AI

__new__ - è un metodo di classe responsabile della creazione di una nuova istanza della classe. Viene chiamato prima di __init__ e determina quale oggetto verrà restituito. È principalmente usato per creare oggetti unici (Singleton) o oggetti di tipo immutabile (come tuple o str).

class Singleton:
    _instance = None

    def __new__(cls):
        # Verifica se esiste già un'istanza
        if cls._instance is None:
            # Se no, la crea delegando la creazione alla classe genitore (object)
            cls._instance = super().__new__(cls)
        # Restituisce l'istanza esistente o appena creata
        return cls._instance

# Esempi di utilizzo
s1 = Singleton()
s2 = Singleton()

# Risultato atteso: True
print(s1 is s2)

Confronto tra __new__ e __init__:

  • __new__:

    • Metodo statico (il primo argomento è cls).
    • Chiamato prima della creazione dell'istanza.
    • Restituisce l'istanza creata.
  • __init__:

    • Metodo di istanza (il primo argomento è self).
    • Chiamato dopo la creazione dell'istanza.
    • Non restituisce valori (ritorna implicitamente None).
    • Usato per inizializzare gli attributi dell'oggetto creato.