Python new mot-clé

Aditya Raj 30 janvier 2023
  1. Quel est le new mot-clé en Python ?
  2. Comment utiliser le new mot-clé en Python ?
  3. Comment pouvons-nous implémenter explicitement la méthode __new__() ?
  4. Conclusion
Python new mot-clé

Dans les langages de programmation comme C++ et Java, vous pouvez utiliser le mot-clé new explicitement pour créer un objet à partir d’une classe. Cependant, vous ne pouvez pas utiliser le mot-clé new directement dans Python. Dans cet article, nous allons discuter du fonctionnement du new mot-clé en Python. Nous verrons également comment utiliser explicitement le mot-clé new pour observer le processus de création d’objet en Python.

Quel est le new mot-clé en Python ?

En Python, __new__ est un attribut associé aux objets. Vous pouvez vérifier tous les attributs d’un objet à l’aide de la fonction dir(). La fonction dir() prend l’objet en entrée et renvoie une liste de tous les attributs de l’objet comme suit.

class Car:
    def __init__(self, model, brand, price, country):
        self.Brand = brand
        self.Model = model
        self.Price = price
        self.Country = country


myCar = Car("Tesla", "Cybertruck", 40000, "USA")
print(dir(myCar))

Production :

['Brand', 'Country', 'Model', 'Price', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']

Vous pouvez observer qu’il y a un attribut __new__ présent dans la liste.

Comment utiliser le new mot-clé en Python ?

Nous ne pouvons pas utiliser explicitement le mot-clé new en Python comme nous le faisons dans d’autres langages de programmation. Cependant, l’attribut __new__ en Python fonctionne de la même manière que le mot-clé new dans d’autres langages de programmation. La méthode __new__ est définie dans la classe de base objet et est utilisée pour allouer du stockage pour un objet.

Lorsque nous créons un nouvel objet en appelant le nom de la classe à l’aide de la syntaxe className(), la méthode __call__() de la classe est exécutée. La méthode __call__() appelle la méthode __new__(). Ici, la méthode __new__() alloue de la mémoire à l’objet et renvoie le contrôle à la méthode __call__().

La méthode __call__() appelle alors la méthode __init__(). La méthode __init__() initialise les variables de classe et renvoie le contrôle à la méthode __call__(). La méthode __call__() termine alors l’exécution et nous renvoie la référence à l’objet créé.

Comment pouvons-nous implémenter explicitement la méthode __new__() ?

Nous n’avons pas besoin d’implémenter explicitement la méthode __new__() en Python. Cependant, si vous voulez voir l’ordre dans lequel la méthode __new__() et la méthode __init__() sont exécutées, nous pouvons surcharger la méthode __new__(). Comme nous l’avons vu plus haut, la méthode __new__() est une méthode statique et est définie dans la classe d’objet. Lorsque nous créons un objet en utilisant le nom de la classe, sa méthode __new__() est automatiquement invoquée.

La méthode __new__() prend un argument d’entrée cls qui représente la classe courante. Ensuite, la méthode __new__() appelle la méthode __new__() de sa superclasse avec la classe courante comme argument d’entrée. Ce processus doit continuer jusqu’à ce que nous atteignions la classe de base objet. Dans la classe de base objet, la méthode __new__() est exécutée et le stockage est alloué à l’objet que nous voulons créer. Ensuite, une instance de l’objet est créée. La méthode __new__() renvoie alors l’instance, après quoi la méthode __init__() est utilisée pour initialiser les variables dans l’instance.

Vous pouvez observer l’ensemble de ce processus dans l’exemple suivant.

class Car:
    def __init__(self, brand, model, price, country):
        print("I am in the __init__() method.")
        self.Brand = brand
        self.Model = model
        self.Price = price
        self.Country = country

    def __new__(cls, *args, **kwargs):
        print("I am in the __new__() method.")
        return super(Car, cls).__new__(cls)


myCar = Car("Tesla", "Cybertruck", 40000, "USA")

Production :

I am in the __new__() method.
I am in the __init__() method.

Ici, la méthode __new__() que nous avons implémentée appartient à la classe courante, et elle n’affecte pas la manière dont une instance d’un objet est créée. Pour changer cela, nous devrons changer la méthode __new__() dans la classe de base object. Mais nous ne sommes pas autorisés à le faire et vous ne devriez pas essayer de faire une telle expérience. De plus, vous pouvez vérifier dans la sortie que la méthode __new__() est exécutée avant la méthode __init__().

Conclusion

Nous avons discuté du new mot-clé en Python dans cet article. Nous avons aussi vu comment obtenir tous les attributs associés à une classe en utilisant la méthode dir(). De plus, nous avons également vu comment un objet est créé en Python et comment fonctionne la méthode __new__(). Nous avons également implémenté nous-mêmes la méthode __new__(). Cependant, ce n’est pas très utile, et je vous suggère de ne pas implémenter la méthode __new__() par vous-même.

Auteur: Aditya Raj
Aditya Raj avatar Aditya Raj avatar

Aditya Raj is a highly skilled technical professional with a background in IT and business, holding an Integrated B.Tech (IT) and MBA (IT) from the Indian Institute of Information Technology Allahabad. With a solid foundation in data analytics, programming languages (C, Java, Python), and software environments, Aditya has excelled in various roles. He has significant experience as a Technical Content Writer for Python on multiple platforms and has interned in data analytics at Apollo Clinics. His projects demonstrate a keen interest in cutting-edge technology and problem-solving, showcasing his proficiency in areas like data mining and software development. Aditya's achievements include securing a top position in a project demonstration competition and gaining certifications in Python, SQL, and digital marketing fundamentals.

GitHub

Article connexe - Python Class