Anonimowy użytkownik
Więcej
Co robią __init__ i self w Pythonie?
Ja'uczę się języka programowania Python i'natknąłem się na coś, czego'nie do końca rozumiem.
W metodzie takiej jak:
def method(self, blah):
def __init__(?):
....
....
Co robi self
? Czym ma być? Czy jest obowiązkowe?
Co robi metoda __init__
? Dlaczego jest konieczna? (etc.)
Wydaje mi się, że mogą to być konstrukcje OOP, ale nie wiem zbyt wiele.
731
3
W tym kodzie:
... zmienna
self
reprezentuje instancję samego obiektu. Większość języków zorientowanych obiektowo przekazuje ją jako ukryty parametr do metod zdefiniowanych na obiekcie; Python tego nie robi. Musisz ją jawnie zadeklarować. Kiedy tworzysz instancję klasyA
i wywołujesz jej metody, zostanie ona przekazana automatycznie, jak w ...Metoda
__init__
jest w przybliżeniu tym, co reprezentuje konstruktor w Pythonie. Kiedy wywołujeszA()
, Python tworzy dla Ciebie obiekt i przekazuje go jako pierwszy parametr do metody__init__
. Wszelkie dodatkowe parametry (np.A(24, 'Hello')
) również zostaną przekazane jako argumenty - w tym przypadku powodując zgłoszenie wyjątku, ponieważ konstruktor ich nie oczekuje.Yep, masz rację, to są konstrukcje oop.
__init__
jest konstruktorem dla klasy. Parametrself
odnosi się do instancji obiektu (jakthis
w C++).Metoda
__init__
jest wywoływana, gdy pamięć dla obiektu jest alokowana:Ważne jest, aby używać parametru
self
wewnątrz metody obiektu'jeśli chcesz, aby wartość była trwale związana z obiektem. Jeśli, na przykład, zaimplementujesz metodę__init__
w ten sposób:Twoje parametry
x
iy
byłyby przechowywane w zmiennych na stosie i zostałyby odrzucone, gdy metoda init wyjdzie poza zakres. Ustawienie tych zmiennych jakoself._x
iself._y
ustawia te zmienne jako członków obiektuPoint
(dostępnych przez cały czas życia obiektu).__init__
zachowuje się jak konstruktor. Będziesz musiał przekazać "self" do każdej funkcji klasy jako pierwszy argument, jeśli chcesz, aby zachowywały się one jak metody niestatyczne. "self" są zmiennymi instancji dla twojej klasy.