Kezdőoldal » Számítástechnika » Programozás » Valaki érthetően eltudja...

Valaki érthetően eltudja magyarázni pythonban miért használjuk a self-et?

Figyelt kérdés

pl van egy osztályom:

class CalculatorController:

def __init__(self, model, view):


itt a def__init__() milyen értékeket vár? nem értem miért kell neki a self.


2023. szept. 16. 15:55
 1/4 anonim ***** válasza:
100%

Amikor osztályod van, az még csak egy "üres" tervként létezik, tehát még nincs meg az egyed, de akkor hogy hivatkozol rá, hogy mikor az egyed létrejön az osztályból, akkor is jó legyen? Erre jó a self.


def __init__(self,...)

a konstruktor.

A szerepe az, hogy mikor létrejön maga az objektum az osztályból, akkor ez fog lefutni úgymond inicializálja, azaz kezdeti beállításokat elvégzi az adott objektumon.

2023. szept. 16. 17:14
Hasznos számodra ez a válasz?
 2/4 anonim ***** válasza:
100%
Máshogy mondva, amit fentebb írtam, a self önmagát az osztályból létrehozott konkrét egyedet jelenti.
2023. szept. 16. 20:20
Hasznos számodra ez a válasz?
 3/4 anonim ***** válasza:
0%
self = szülő
2023. szept. 18. 05:18
Hasznos számodra ez a válasz?
 4/4 anonim ***** válasza:

Ahogy korábban is írták, amikor egy osztályból, ami a tervrajz, példányosítasz egy objektumot, ami a konkrét egyed, akkor valamilyen módon hivatkozni kell az objektumra.


Miért?


Az osztályokban definiált függvények végső soron nem sokban különböznek az összes többi függvénytől, egy dolgot kivéve: annak az objektumnak az adatait, amelyikhez tartoznak, közvetlenül elérik. Csakhogy egy osztályból tetszőleges számú objektumot lehet példányosítani (a szingleton más kényszerek mentén válik szingletonná), viszont az osztályban definiált metódusok nem sokszorozódnak. Ennélfogva valamilyen módon tudatni kell a metódussal - ami, mint mondtam, technikailag nem sokban különbözik a többi függvénytől -, hogy éppen melyik objektumpéldánnyal kell foglalkoznia.


A "self" jelöli mindig az aktuális objektumpéldányt, amire értelmezzük a műveletet, innen tudja a függvény - metódus - hogy mivel kell dolgoznia.


Olyannyira, hogy ez más környezetekben is így, vagy hasonlóan működik (C++, .Net, JAVA, Pascal, stb)


Miért nem kell átadni? A metódusokat az objektum megjelölésével hívjuk, vagyis: "myBird.fly()" vagy "yourCar.run()" A hívás során a "myBird" és a "yourCar" egyértelműen megjelöli, hogy melyik objektumokról beszélünk, vagyis felesleges megismételni (pl.: "myBird.fly(myBird)"), ezért ezt ún. implicit módon megteszi a Python helyettünk.


A legtöbb nyelvben ez annyira transzparens, hogy az adott nyelv "self" megfelelőjét csak ritka esetekben kell használni. Az, hogy a Pyhtonban miért kötelező kiírni, inkább filozófiai-tervezési kérdés, mint gyakorlati. A fő motiváció az "explicit is better than implicit" elv, illetve, hogy egy függvénynek ne legyenek láthatatlan paraméterei. Gyakorlatiasabb szemszögből így külön kulcsszó nélkül lehet osztály és statikus metódusokat definiálni.



A Python tervezői így írnak:

[link]

2023. szept. 19. 13:09
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!