Python - Konstruktori

Sadržaj
U Piton postoje takozvane "čarobne" metode, odnosno metode koje su konstruirane i imaju poseban naziv i koje se pozivaju samo pod određenim okolnostima, budući da izravni poziv ovih metoda nije uobičajen u opsegu programa.
Graditelji
Način __u tome__ on je zadužen da djeluje kao konstruktor, to jest da će pokrenuti niz atributa i izvršiti kôd koji definiramo u trenutku stvaranja objekta klase, nazivajući se "__init__" s dva podcrtavanja na početak i kraj riječi init tada već imate odgovarajuću sintaksu za to Piton shvatite to kao "čarobnu" metodu i znajte da se mora izvršiti prilikom instanciranja klase.
Ono što konstruktor postiže je da umjesto da učini sljedeće za inicijalizaciju objekta:
 >>> f = FooBar () >>> f.init () 

Već postavljajući ovaj kôd objekt je inicijalizirao svoje atribute samo pomoću:
>>> f = FooBar ()

Kao što vidite, to je važna ušteda pri kodiranju i pomoć u slučaju da zaboravimo inicijalizirati objekt.
Kreiranje konstruktora
Kreirajte konstruktor u Piton Vrlo je jednostavno, samo moramo definirati metodu i dodati što se mora učiniti kada se objekt stvori, pogledajmo primjer:

Na slici možete vidjeti definiranu metodu, a u onome što mora izvršiti vidimo da definira atribut somevar i jednako je 42. Pogledajmo primjer kako bi objekt ove klase trčao:

Na slici vidimo da pri definiranju objekta f tipa FooBar Pokreće se i prilikom pristupa svom atributu somevar ispisuje 42, što je vrijednost definirana u konstruktoru.
Što se događa ako želimo da se atributi dinamički inicijaliziraju, prepišimo metodu na sljedeći način:
 klasa FooBar: def __init __ (self, vrijednost = 42): self.somevar = vrijednost 

Postavljanjem opcijskog parametra možemo proslijediti vrijednost, u slučaju da je ne proslijedimo, uzeti će 42 kao zadanu vrijednost.
Izvođenje programa bilo bi kako slijedi:
 >>> f = FooBar ('Ovo je argument konstruktora') >>> f.somevar 'Ovo je argument konstruktora' 

Na taj smo način naš konstruktor učinili dinamičnim tako da našim objektima možemo dodijeliti različite atribute ovisno o našim potrebama unutar programa.
Prepisivanje konstruktora
Postoje slučajevi kada moramo naslijediti od super klasa, jer za to ponekad moramo prebrisati konstruktor, pogledajmo sljedeći primjer da bismo razumjeli o čemu se radi:

Ovdje smo stvorili klasu pod nazivom Bird gdje konstruktor definira atribut gladni, izvršavamo sljedeće i vidimo kako to funkcionira:
 >>> b = Bird () >>> b.eat () Aaaah… >>> b.eat () Ne, hvala! 

Što se događa ako naslijedimo iz ove klase, pogledajmo sljedeći kod:
 klasa SongBird (Bird): def __init __ (self): self.sound = 'Squawk!' def sing (self): print self.sound 

Pokrećemo mali program:
 >>> sb = SongBird () >>> sb.sing () Squawk! 

Sada ako pozovemo način eat () vidjet ćemo pogrešku:
 >>> sb.eat () Traceback (posljednji zadnji poziv): Datoteka "", redak 1, u? Datoteka "birds.py", 6. redak, u eat if self.hungry: AttributeError: Instanca SongBird nema atribut "hungry" 

Iznimka nam govori da atribut gladni ne postoji, pa moramo pozvati konstruktor super klase unutar našeg konstruktora:
 klasa SongBird (Bird): def __init __ (self): Bird .__ init __ (self) self.sound = 'Squawk!' def sing (self): ispis self.zvuk 

Sada će prilikom izvršavanja koda sve raditi bez problema:
 >>> sb = SongBird () >>> sb.sing () Squawk! >>> sb.eat () Aaaah … >>> sb.eat () Ne, hvala! 

Ovim smo završili vodič, već znamo kako koristiti metodu __init__ na osnovni način i kako to učiniti kada moramo naslijediti od više klase.Je li vam se svidio i pomogao ovaj vodič?Autor možete nagraditi pritiskom na ovaj gumb kako biste mu dali pozitivan bod
wave wave wave wave wave