Metoda __init__

0

Cześć, trochę po marudzę czasem w tym dziale z pierdołami. Proszę o wyrozumiałość przez najbliższe parę tygodni/miesięcy ;)

Mam pytanie odnośnie metody init. Przerabiam książkę do nauki pythona i tam przedstawiono tą metodę, jako coś co jest potrzebne do stworzenia klasy.
I ok przyjmuje do wiadomości, ale chciałbym zrozumieć co konkretnie ona robi.

class Dog(): #Tworzymy klasę Dog.
    def __init__(self): # co tutaj się tak na prawdę dzieje? Czym tak na prawdę jest parametr self?

Może pytanie abstrakcyjnie głupie, ale jednak chciałbym to w 100% zrozumieć.

Potrafię rozbudować taką klasę dodać metody które będą modyfikować jakieś atrybuty itd. Bo książka tego uczy, ale nie tłumaczy jak to na prawdę działa.
Pomoże ktoś kretynowi? :)

1

Dunder init to, po prostu, konstruktor obiektu, jak Znasz inne języki, np., C++, czy Javę, to Wiesz co to. Gdy Napiszesz gdzieś: hot_dog_dog = Dog(), to w tym momencie tworzy się egzemplarz obiektu i zostaje przekazany, jako pierwszy parametr - self (w Pythonie, nie tak jak w innych językach, musi się go wpisać) do __init__ , również i inne parametry, gdy są, i tam dalej metoda działa z obiektem.
Czyli, jeszcze raz, dunder init w Pythonie = konstruktor w C++.

0

Tzn nie znam innych języków(pewnie dlatego mam takie "problemy").

Ok dziękuje za łopatologiczne wytłumaczenie. Teraz jest zdecydowanie jaśniej. ;)

3

Warto dodać, że w Pythonie masz dwie magiczne metody "konstruktory". Najpopularniejszy __init__ przyjmuje jako parametr obiekt (self) i wykonuje się gdy obiekt danej klasy już powstał, ale nie został jeszcze zwrócony do wywołującego. __init__ często używa się do zainicjalizowania stanu obiektu, np. nadania wartości jakiemuś polu. Jest jeszcze magiczna (dunder) metoda __new__ która jest statyczna, przyjmuje jako parametr klasę (nie mylić z obiektem), wykonuje się jeszcze przed powstaniem obiektu danej klasy. Jej celem jest umożliwienie programiście wpłynięcia na proces tworzenia obiektu. Metoda __new__ zwraca instancję obiektu.

0

Dzięki za informacje ;) Przyda się na pewno, dziś wieczorkiem popatrzę jak to działa.

Generalnie mam do Was pytanko.
Jako że się uparłem trochę na naukę pythona (w pracy byłby mi przydatny) ale w sumie nie tylko. I teraz tak jak pisałem przerabiam sobie książkę: python instrukcje dla programisty
i mam dylemat. Pewnie za jakiś krótki czas, może 2-3 tyg skończę ten materiał i co dalej? Może to głupio zabrzmi ale większość książek tak jak zresztą i ta z której korzystam uczy wszystkiego od zera. I sądząc po spisach treści jest w nich zawarta ta sama +/- treść. Znacie może jakieś tytuły które są o krok dalej? Bo na naukę jakiegoś konkretnego freamworka chyba będzie za wcześnie.

Pewnie widzieliście 4000 takich pytań, ale nie mogłem znaleźć jakiegoś fajnego tytułu książki dla ludzi znających podstawy podstaw.

1

Np : Zaawansowany Python. Jasne, zwięzłe i efektywne programowanie Autor:Luciano Ramalho

1

Tak, Luciano Ramalho rzondzi:) Rzuć, również, okiem tutaj:
https://interactivepython.org/runestone/default/user/login?_next=/runestone/default/index ,
tutaj: https://realpython.com/ ,
oraz tutaj: https://dbader.org/

0

O książce Zaawansowany Python autorstwa Luciano Ramalho myślałem, ale nie mogłem znaleźć na necie jakiś sensownych opinii, jak panowie polecają to biere.

@lion137 świetne te stronki dzięki!

1 użytkowników online, w tym zalogowanych: 0, gości: 1