Bonjour, j'essaie de comprendre __init__ en classe en Python, j'ai compris le fonctionnement des classes mais je ne comprenais pas 1 chose voici le code:

class Computer:

    def __init__(self,name,cpu,ram,hdd,ssd):
        self.name = name
        self.cpu = cpu
        self.ram = ram
        self.hdd = hdd
        self.ssd = ssd
    def config(self):
        print("Configuration of computer is: ", self.name, self.cpu,self.ram,self.hdd,self.ssd )


computer1 = Computer("HP ","i7 ","16gb ","1TB ","256GB")
computer1.config()

Pourquoi et comment les arguments Computer("HP ","i7 ","16gb ","1TB ","256GB") sont passés automatiquement à __init__(self,name,cpu,ram,hdd,ssd)? pourquoi nous écrivons ces arguments entre parenthèses de classe et pas séparément comme ceci:

 computer1.__init__("HP ","i7 ","16gb ","1TB ","256GB")

Comment le code peut comprendre que les arguments écrits entre parenthèses de Computer doivent être passés à __init__?

1
user9714088 2 juin 2020 à 19:26

3 réponses

Meilleure réponse

Car la méthode __init__ est à peu près ce qui représente un constructeur en Python. Lorsque vous appelez Computer("HP ","i7 ","16gb ","1TB ","256GB"), Python crée un objet pour vous et le transmet comme premier paramètre à la méthode __init__. Tous les paramètres supplémentaires (plus que les cinq que vous avez déclarés) seront également passés en arguments - dans ce cas provoquant le déclenchement d'une exception, car le constructeur ne les attend pas.

2
marksman123 2 juin 2020 à 16:31

C'est ainsi que fonctionne python. Il a probablement été conçu comme ça parce que certaines classes / structures sont écrites en C.

Par exemple. Lorsque vous souhaitez implémenter une classe personnalisée et implémenter pour elle la fonction len(), vous pouvez donc en obtenir la longueur en appelant len(instance_of_your_class). Ensuite, tout ce que vous avez à faire est d'implémenter la méthode __len__() dans votre classe.
D'un autre côté, vous avez la classe list en python. Cette classe est implémentée en C, car elle doit être très rapide. Ensuite, lorsque vous appelez len(instance_of_list) interprété, vous appellerez __len__, qui appellera la fonction equavilent en C.

De cette conception découle de nombreux avantages. Un exemple est la méthode __getitem__. Vous implémentez pour pouvoir obtenir des éléments avec instalce_of_class[2]. Mais cela vous permet également d'utiliser in (if value in instance_of_class).

Vous pouvez lire des méthodes comme ça. Dans le jargon python, ce sont des méthodes dunder.

0
Hubert Skrzypczak 2 juin 2020 à 16:40

La classe en python crée l'objet et la __init__ méthode de classe est le constructeur de classe . attribuez une valeur à la classe en appelant le nom de la classe comme Computer('','','') normalement, le python passera les valeurs de la classe comme paramètre dans la méthode __init__ en fonction de leurs index également vous pouvez créer une autre classe et hériter de la méthode de la classe parente via le paramètre de la classe enfant

0
Gad 2 juin 2020 à 16:49