Sobes.tech
Middle

Τι κάνει η μέθοδος new στο πλαίσιο της γλώσσας Python;

sobes.tech AI

Απάντηση από AI

__new__ - είναι μια μέθοδος κλάσης που είναι υπεύθυνη για τη δημιουργία μιας νέας στιγμιότυπου της κλάσης. Καλείται πριν από το __init__ και καθορίζει ποιο αντικείμενο θα επιστραφεί. Χρησιμοποιείται κυρίως για τη δημιουργία μοναδικών αντικειμένων (Singleton) ή αντικειμένων αμετάβλητου τύπου (όπως tuple ή str).

class Singleton:
    _instance = None

    def __new__(cls):
        # Ελέγχει αν υπάρχει ήδη ένα στιγμιότυπο
        if cls._instance is None:
            # Αν όχι, το δημιουργεί αναθέτοντας τη δημιουργία στην υπερκλάση (object)
            cls._instance = super().__new__(cls)
        # Επιστρέφει το υπάρχον ή το νέο δημιουργημένο στιγμιότυπο
        return cls._instance

# Παραδείγματα χρήσης
s1 = Singleton()
s2 = Singleton()

# Αναμενόμενο αποτέλεσμα: True
print(s1 is s2)

Σύγκριση μεταξύ __new__ και __init__:

  • __new__:

    • Στατική μέθοδος (ο πρώτος παράμετρος είναι cls).
    • Καλείται πριν από τη δημιουργία του στιγμιότυπου.
    • Επιστρέφει το δημιουργημένο στιγμιότυπο.
  • __init__:

    • Μέθοδος στιγμιότυπου (ο πρώτος παράμετρος είναι self).
    • Καλείται μετά τη δημιουργία του στιγμιότυπου.
    • Δεν επιστρέφει τιμές (επιστρέφει έμμεσα None).
    • Χρησιμοποιείται για την αρχικοποίηση των χαρακτηριστικών του δημιουργημένου αντικειμένου.