Python - Konstruktory

Spisie treści
w Pyton istnieją tak zwane „magiczne” metody, to znaczy metody, które są skonstruowane i mają specjalną nazwę i są wywoływane tylko w określonych okolicznościach, ponieważ bezpośrednie wywołanie tych metod nie jest zwyczajowe w zakresie programu.
Budowniczowie
Metoda __w tym__ jest odpowiedzialny za działanie jako konstruktor, to znaczy, że zainicjuje serię atrybutów i wykona kod, który definiujemy w momencie tworzenia obiektu klasy, nazywając się „__init__” z dwoma podkreśleniami w początek i koniec słowa inicjującego, to masz już odpowiednią składnię Pyton potraktuj to jako „magiczną” metodę i wiedz, że musi zostać wykonane podczas tworzenia instancji klasy.
Konstruktor osiąga to, że zamiast wykonywać następujące czynności, aby zainicjować obiekt:
 >>> f = FooBar () >>> f.init () 

Już umieszczając ten kod, obiekt zainicjował swoje atrybuty tylko za pomocą:
>>> f = FooBar ()

Jak widać, jest to ważna oszczędność podczas kodowania i pomoc w przypadku, gdy zapomnimy zainicjalizować obiekt.
Tworzenie konstruktora
Utwórz konstruktor w Pyton Jest to dość proste, wystarczy zdefiniować metodę i dodać, co należy zrobić, gdy obiekt jest tworzony, zobaczmy przykład:

Na obrazku widać zdefiniowaną metodę i w tym, co musi wykonać, widzimy, że definiuje ona atrybut jakiś inny i równa się 42. Zobaczmy przykład działania obiektu tej klasy:

Na obrazku widzimy, że przy definiowaniu obiektu f typu FooBar Jest inicjowany i kiedy uzyskuje dostęp do jego atrybutu, somevar wypisuje 42, czyli wartość zdefiniowaną w konstruktorze.
Teraz, co się stanie, jeśli chcemy, aby atrybuty były inicjowane dynamicznie, przepiszmy metodę w następujący sposób:
 class FooBar: def __init __ (self, value = 42): self.somevar = value 

Dokonując opcjonalnego parametru możemy przekazać wartość, w przypadku gdy jej nie przekażemy, przyjmie ona 42 jako wartość domyślną.
Wykonanie programu wyglądałoby następująco:
 >>> f = FooBar ('To jest argument konstruktora') >>> f.somevar 'To jest argument konstruktora' 

W ten sposób uczyniliśmy naszego konstruktora dynamicznym, dzięki czemu możemy przypisać różne atrybuty naszym obiektom w zależności od naszych potrzeb w programie.
Nadpisywanie konstruktora
Są chwile, kiedy musimy dziedziczyć po superklasach, do tego czasami musimy nadpisać konstruktor, zobaczmy poniższy przykład, aby zrozumieć o co w tym wszystkim chodzi:

Tutaj stworzyliśmy klasę Bird, w której konstruktor definiuje atrybut głodny, wykonujemy następujące i widzimy, jak to działa:
 >>> b = Ptak () >>> b.eat () Aaaah… >>> b.eat () Nie, dzięki! 

Teraz co się stanie, jeśli dziedziczymy z tej klasy, zobaczmy następujący kod:
 class SongBird (Bird): def __init __ (self): self.sound = 'Squawk!' def sing (self): print self.sound 

Prowadzimy mały program:
 >>> sb = SongBird () >>> sb.sing () Krzyk! 

Teraz, jeśli wywołamy metodę eat(), zobaczymy błąd:
 >>> sb.eat () Traceback (ostatnie wywołanie ostatnie): Plik "", wiersz 1, in? Plik „birds.py”, wiersz 6, w jedz, jeśli self.hungry: AttributeError: Instancja SongBird nie ma atrybutu „hungry” 

Wyjątek mówi nam, że atrybut hungry nie istnieje, więc musimy wywołać konstruktor superklasy w naszym konstruktorze:
 class SongBird (Bird): def __init __ (self): Bird .__ init __ (self) self.sound = 'Squawk!' def sing (self): print self.sound 

Teraz podczas wykonywania kodu wszystko będzie działać bez problemów:
 >>> sb = SongBird () >>> sb.sing () Krzyk! >>> sb.eat () Aaaah… >>> sb.eat () Nie, dzięki! 

Na tym kończymy samouczek, wiemy już, jak w prosty sposób korzystać z metody __init__ i jak to zrobić, gdy musimy dziedziczyć z wyższej klasy.Podobał Ci się i pomógł ten samouczek?Możesz nagrodzić autora, naciskając ten przycisk, aby dać mu pozytywny punkt
wave wave wave wave wave