Cuprins
În Piton există așa-numitele metode „magice”, adică metode care sunt construite și au un nume special și care sunt numite numai în anumite circumstanțe, deoarece apelul direct al acestor metode nu este obișnuit în sfera unui program.Constructori
Metoda __init__ este însărcinat să acționeze ca un constructor, adică va inițializa o serie de atribute și va executa codul pe care îl definim în momentul creării unui obiect al clasei, fiind numit „__init__” cu două puncte de subliniere la începutul și sfârșitul cuvântului inițial, atunci aveți deja sintaxa adecvată pentru asta Piton ia-o ca pe o metodă „magică” și știi că trebuie executată la instanțierea clasei.
Ceea ce realizează constructorul este că, în loc să facă următoarele pentru a inițializa un obiect:
>>> f = FooBar () >>> f.init ()
Plasând deja acest cod, obiectul și-a inițializat atributele folosind doar:
>>> f = FooBar ()
După cum puteți vedea, este o economie importantă la codificare și un ajutor în cazul în care uităm să inițializăm obiectul.
Crearea constructorului
Creați constructorul în Piton Este destul de simplu, trebuie doar să definim metoda și să adăugăm ce trebuie făcut atunci când obiectul este creat, să vedem un exemplu:
În imagine puteți vedea metoda definită și în ceea ce trebuie să execute vedem că definește atributul somevar și este egal cu 42. Să vedem un exemplu al modului în care ar rula un obiect din această clasă:
În imagine vedem că atunci când definim obiectul f al tipului FooBar Este inițializat și când accesează atributul său, somevar imprimă 42, care este valoarea definită în constructor.
Ce se întâmplă acum dacă vrem ca atributele să fie inițializate dinamic, să rescriem metoda după cum urmează:
clasa FooBar: def __init __ (self, value = 42): self.somevar = value
Făcând parametrul opțional putem trece o valoare, în cazul în care nu o trecem va lua 42 ca valoare implicită.
Executarea programului ar fi după cum urmează:
>>> f = FooBar ('Acesta este un argument constructor') >>> f.somevar 'Acesta este un argument constructor'
În acest fel, ne-am dinamizat constructorul, astfel încât să putem atribui diferite atribute obiectelor noastre, în funcție de nevoile noastre din cadrul programului.
Suprascrierea constructorului
Există momente în care trebuie să moștenim din superclasele, pentru aceasta uneori trebuie să suprascriem constructorul, să vedem următorul exemplu pentru a înțelege despre ce este vorba:
Aici am creat o clasă numită Bird în care constructorul definește atributul foame, executăm următoarele și vedem cum funcționează:
>>> b = Bird () >>> b.eat () Aaaah … >>> b.eat () Nu, mulțumesc!
Ce se întâmplă acum dacă moștenim din această clasă, să vedem următorul cod:
clasa SongBird (Bird): def __init __ (self): self.sound = 'Squawk!' def sing (self): print self.sunet
Rulăm un mic program:
>>> sb = SongBird () >>> sb.sing () Squawk!
Acum, dacă apelăm metoda eat (), vom vedea o eroare:
>>> sb.eat () Traceback (ultimul apel cel mai recent): Fișierul "", linia 1, în? Fișierul „birds.py”, linia 6, în eat if self.hungry: AttributeError: instanța SongBird nu are atributul „foame”
Excepția ne spune că atributul foame nu există, așa că trebuie să chemăm constructorul super clasei din cadrul constructorului nostru:
clasa SongBird (Bird): def __init __ (self): Bird .__ init __ (self) self.sound = 'Squawk!' def sing (self): print self.sunet
Acum, când executați codul, totul va funcționa fără probleme:
>>> sb = SongBird () >>> sb.sing () Squawk! >>> sb.eat () Aaaah … >>> sb.eat () Nu, mulțumesc!
Cu aceasta terminăm tutorialul, știm deja cum să folosim metoda __init__ într-un mod de bază și cum să o facem atunci când trebuie să moștenim dintr-o clasă superioară.V-a plăcut și ați ajutat acest tutorial?Puteți recompensa autorul apăsând acest buton pentru a-i oferi un punct pozitiv