Objektno orijentirano programiranje u Pythonu: klase, opis i značajke

U Pythonu su klasi temeljni koncept. To je temelj standardne knjižnice, djela najpopularnijih programa i samog jezika. Ako želite postati više od početnika programera, morate shvatiti bit i načelo rada s klasama i predmetima.python klase

Što su klase

Ovo je osnovna softverska komponenta OOP-a. U Pythonu se klase koriste za implementaciju novih vrsta objekata i izrađuju se pomoću posebne nastave klase. Izvana, oni nalikuju standardnim ugrađenim vrstama podataka, kao što su brojevi ili sekvence. Ali klasni objekti imaju značajnu razliku - potpora nasljeđu.

Objektno orijentirano programiranje u Pythonu se potpuno temelji na hijerarhijskoj nasljednosti nastave. Ovo je univerzalni način prilagodbe i ponovnog korištenja koda. No objektno orijentirani pristup nije obvezan. Python omogućuje samo proceduralno i funkcionalno programiranje bez problema.

Glavni zadatak nastave u Pythonu je pakiranje podataka i izvršni kod. Oni su sintaktički isti kao i def definira. Poput funkcija, oni stvaraju vlastite prostore, koji se mogu pozivati ​​više puta od bilo kojeg dijela programa. Zašto su onda potrebni? Nastava su moćniji i svestrani alat. Prije svega, njihov potencijal se otkriva kada se stvaraju novi objekti.metode python klase

Važnost klasa i načelo baštine

Svaki novi objekt ima svoj vlastiti prostor, koji možete programirati, unijeti varijable i stvoriti sve funkcije. I također postoje atributi naslijeđeni iz klase: object.attribute. Ovo je značenje OOP-a.

Zahvaljujući nasljeđivanju, stvara se hijerarhijsko stablo. U praksi to izgleda ovako. Kada prevoditelj susreće izraz object.attribute, počinje tražiti prvo pojavljivanje atributa u navedenoj klasi. Bez otkrivanja atributa, tumač i dalje traži sve povezane klase na gornjem stablu, s lijeva na desno.

Stablo za pretraživanje uključuje:

  • Superclasses koji su na samom vrhu hijerarhije i provode zajedničko ponašanje;
  • podrazredi - dolje su;
  • slučajevi su elementi programa s naslijeđenim ponašanjem.

objekti pitona objekataSlika prikazuje stablo Python klase. Iz primjera vidimo da su klase 2 i 3 superklase. Na samom dnu nalaze se dvije instance instance 1 i 2, u sredini - podrazred klase 1. Ako napišete izraz Instance2.w, to će uzrokovati da tumač traži vrijednost atributa .w u sljedećem redoslijedu:

  1. instance2;
  2. Class1;
  3. Klasa 2;
  4. Class3.

Naziv .w nalazit će se u superclassu klase 3. U OOP terminologiji to znači da instanca 2 "nasljeđuje" .w atribut iz klase3.

Napominjemo da primjeri na slici nasljeđuju samo četiri atributa: .w, .x, .y i .z:

  • Za instanca instance1.x i Instance2.x, atx. X će se naći u klasi 1, gdje će se pretraživanje zaustaviti jer je klasa 1 u stablu niža od klase 2.
  • Za instance1.y i Instance2.y, atribut .y bit će pronađen u klasi 1, pri čemu će se pretraživanje zaustaviti jer je to jedino mjesto na kojem se pojavljuje.
  • Za instance Instance1.z i Instance2.z, prevoditelj će pronaći .z u klasi 2, jer se nalazi na stablu lijevo od klase 3.
  • Za instance2.name, atenom će se naći u instance2 bez traženja stabla.

Prethodna stavka je najvažnija. Prikazuje kako klasa 1 nadjačava atribut .x, zamjenjujući verziju .x verzije klase za razred 2.

Objekti, primjeri i metode

OOP djeluje s dva glavna pojma: klase i predmete. Razredi stvaraju nove tipove, a objekti klase u Pythonu su njihovi primjeri. Na primjer, sve integer varijable odnose se na ugrađenu vrstu podataka int. U OOP jeziku, oni su slučajevi klase int.

Klase su izrađene prema uputama, a objekti se stvaraju pomoću poziva. Mogu pohraniti podatke i imati svoje funkcionalnosti ili metode klase. U Pythonu, terminologija igra važnu ulogu. Uz pomoć, programeri razlikuju neovisne funkcije od onih koji pripadaju razredima. Varijable povezane s objektima nazivaju se polja.

Postoje dvije vrste polja u OOP. Prvo su varijable koje pripadaju cijelu klasu, druga su varijable pojedinih instanci. Polja i metode zajedno su atributi klase. U Pythonu su zapisani u bloku koda nakon klase ključnih riječi.atribute python klase

Metode i značenje sebe

Metode su funkcije s dodatnim imenom. Dodaje se na vrh popisa parametara. Ako želite, varijablu se može nazvati drugačije ime, ali takva inicijativa među programerima nije dobrodošla. Jastvo je uobičajeno, lako prepoznatljivo ime u kodu. Štoviše, neke razvojne okoline su dizajnirane za rad s njom.

Da bismo bolje razumjeli vrijednost sebe u OOP, zamislite da imamo klasu nazvanu ClassA i methodA:

  • > klasa ClassA;
  • def metodaA (self, argument1, argument2).

ObjektA je primjer klase A, a metoda poziva izgleda ovako:

  • > objectA.methodA (argument1, argument2).

Kada prevoditelj vidi ovu liniju, automatski ga pretvara kao na sljedeći način: ClassA.methodA (objectA, argument1, argument2). To jest, instanca klase koristi varijablu sebe kao referencu na sebe.nasljedstvo klase python

Kako izraditi varijable, metode i primjere klasa

Nudimo rastavljanje praktičnog primjera iz interaktivne ljuske Python. Stvaranje klase "Eksperiment prve" započinje spojem klase izjave:

  • > klasa Prvo eksperiment:
  • def setinf (self, value): # izradite prvu metodu s argumentima
  • self.data = vrijednost
  • def prikaz (samo): # druga metoda
  • ispis (self.data) # ispis podataka o primjeru.

Nakon obaveznog uvlačenja slijedi blok s ugrađenim def uputama, u kojima su dodijeljena dva funkcijska objekta imena i postavke naziva. Pomoću njih izrađuju se atributi Experiment First.setinf i Experiment First.display. U stvari, bilo koje ime kojemu je dodana vrijednost na najvišoj razini u ugniježđenom bloku, postaje atribut.



Da biste vidjeli kako metode funkcioniraju, morate izraditi dva slučaja:

  • > x = Prvo eksperiment () # Kreiraju se dva primjerka;
  • > y = Prvo eksperiment () # Svaki od njih je zaseban nazivni prostor.

U početku slučajevi ne pohranjuju nikakve podatke i potpuno su prazni. Ali oni su povezani s njihovom klasom:

  • > x.setinf ("Učenje Python") # Pozivanje načina na koji je samouprave x.
  • > y.setinf (3.14) # Ekvivalent: Eksperiment Prvi.setinf (y, 3.14)

Ako se kroz naziv instance x, y odnosi na atribut .setinf objekta Experiment First, tumač vraća vrijednost atributa klase kao rezultat pretraživanja stabla nasljeđivanja.

  • > x.display () # xi y imaju vlastite vrijednosti self.data
  • Saznajte za Python
  • > y.display ()
  • 3.14.

primjeri pionskih klasa

Preopterećenje operatera

U Pythonu klase mogu preopteretiti izražavanje izraza. Ova sposobnost čini primjerima sličnim ugrađenim vrstama podataka. Proces se sastoji od primjene metoda s posebnim nazivima koji započinju i završavaju dvostrukim naglascima.

Razmotrite u akciji __init__ i __sub__. Prva metoda se naziva klasni konstruktor. U Pythonu, __init__ izvršava preopterećenje na radnji izrade instalacije. Druga metoda __sub__ provodi operaciju oduzimanja.

  • > klasa Preopterećenje: # stvara novu klasu
  • def __init __ (sam, početak):
  • self.data = početak
  • def __sub __ (samouprave, ostalo): # instance minus other
  • povratak Preopterećenje (self.data - drugo) # Rezultat je nova instanca
  • > A = preopterećenje (10) #__ init __ (A, 10)
  • > B = A - 2 #__ pod __ (B, 2)
  • > B.data # B je nova instanca razreda preopterećenja
  • 8.

Više o metodi __init__

Metoda __init__ najčešće se koristi pri radu s klasama. To je neophodno za inicijalizaciju raznih objekata. __init__ ne mora biti pozvan odvojeno. Kada se stvori nova instanca, metoda automatski prima argumente navedene u zagradama.

Pomoću načina preopterećenja možete provesti sve operacije s ugrađenim vrstama podataka. Većina se koristi samo pri rješavanju posebnih zadataka u kojima je potrebno da objekti oponašaju ponašanje standardnih objekata.

Metode su naslijeđene od superklasama i nisu obavezne. U početnim fazama jednostavno možete bez njih. No, za potpuni uranjanje u programiranje i suštinu OOP-a, morate raditi s operatorima.

konstrukt graditelja python

__getitem__ metoda

Metoda __getitem__ obavlja preopterećenje pristupa elementu na indeksu. Ako je naslijeđen ili prisutan u definiciji klase, tumač će to automatski nazvati za svaku indeksiranu operaciju. Na primjer, kada se primjer F pojavljuje u izrazu za pronalaženje elementa na indeksu, kao što je F [i], Python tumač naziva metodu __getitem__, prenosi objekt F u prvi argument i indeks naveden u kvadratne zagrade, u drugom.

Sljedeća tablica "Indeksni indeks" vraća trg vrijednosti indeksa:

  • > class SampleIndexation:
  • def __getitem __ (samo, indeks):
  • indeks povratka ** 2
  • > F = Primjer indeksiranja ()
  • > F [2] # Izraz F [i] poziva F .__ getitem __ (i)
  • 4
  • > za i u dometu (5):
  • print (F [i], kraj = "") # Pozivi __getitem __ (F, i) u svakoj iteraciji
  • 0 1 4 9 16

S istom metodom možete izvesti operaciju ekstrakcije kriška, koja se često koristi pri radnji s nizom. Prilikom obrade popisa standardna sintaksa za rad je sljedeća:

  • > Popis = [13, 6, «i», «sa», 74,9]
  • > Popis [2: 4]
  • ["I", "c"]
  • > Popis [1:]
  • [6, "i", "c", 74,9]
  • > Popis [: - 1]
  • [13, 6, "i", "c"]
  • > Popis [:: 2]
  • [13, "i", 74,9]

Klasa koja provodi metodu __getitem__:

  • > klasni indeks:
  • my_list = [13, 6, «i», «sa», 74,9]
  • def __getitem __ (samo, indeks): # Nazvan kada indeksira ili važi krišku
  • print ("getitem:", indeks)
  • povratak self.my list [index] # Izvršava indeksiranje ili izvlači krišku
  • > X = indeks ()
  • > X [0] # Kod indeksiranja, __getitem__ dobiva cijeli broj
  • getitem: 0
  • 13
  • > X [2: 4] # Kad ekstrahirajte krišku, __getitem__ prima objekt odsječka
  • getitem: kriška (2, 4, nema)
  • ["I", "c"]

Python stvara klasu

Pristup atributima

Da biste dobili referencu na atribut, upotrijebite posebnu metodu __getattr__. Naziva se imenom atributa u obliku niza u slučajevima otkrivanja pokušaja da se dobije referenca na nepostojeći ili nedefinirani atribut. Kada prevoditelj može pronaći željeni objekt u stablu nasljeđivanja, __getattr __. Nije pozvan.

Metoda je prikladna za opću obradu zahtjeva za atributima:

  • > klasa Otišla:
  • def __getattr __ (ja, atname):
  • ako atname == "dob":
  • povrat 20
  • drugo:
  • povisiti vrijednost AttributeError, atname
  • > D = otišao ()
  • > D.age
  • 20
  • > D.name
  • AttributeError: ime

Gone klasa i njezin primjer D nemaju vlastite atribute. Stoga, prilikom pristupanja Dage, automatski se poziva __getattr__ metoda. Sama instanca prolazi kao samouprave, ali naziv nedefiniranog "doba" u nizu atname. Klasa vraća rezultat pristupa nazivu D.age, unatoč činjenici da nema takav atribut.

Ako klasa ne predviđa rukovanje atributom, metoda __getattr__ zove ugrađenu iznimku, i time prenosi informacije tumaču da je ime zapravo nedefinirano. U tom slučaju, pokušaj pristupa nazivu D.name rezultiralo je pogreškom.

Metoda __setattr__ operatora preopterećenja radi na sličan način, presrećući svaki pokušaj dodjeljivanja atributne vrijednosti. Ako je ova metoda registrirana u tijelu klase, izraz "self.attribute = value" pretvorit će se u poziv na metodu self .__ setattr _ ("atribut", vrijednost).

Opisali smo samo nekoliko postojećih metoda preopterećenja. Cjelokupni popis nalazi se u standardnom vodiču jezika i uključuje mnogo više imena.

Dodatne značajke

OOP se ponekad koristi za složene i nestandardne zadatke. Naslijedivši klase u Pythenu, ponašanje ugrađenih tipova podataka i njihovih sposobnosti je pogodno za širenje i prilagodbu.

Ako niste zadovoljni činjenicom da indeksiranje u nizu počinje ispočetka, možete ga popraviti pomoću izjave klase. Da biste to učinili, izradite podrazred vrste popisa s novim nazivima svih vrsta i provedite potrebne izmjene. Također u OOP-u u Pythonu postoje funkcionalni dekoratori, statičke metode i mnoge druge složene i posebne tehnike.

Dijelite na društvenim mrežama:

Povezan
Što je to encapsulation? Inkapsuliranje u programiranjuŠto je to encapsulation? Inkapsuliranje u programiranju
Što je OOP? Osnovni principi objektno orijentiranog programiranjaŠto je OOP? Osnovni principi objektno orijentiranog programiranja
Programiranje igara: programi, značajke stvaranja i preporukeProgramiranje igara: programi, značajke stvaranja i preporuke
Python programski jezik: petljePython programski jezik: petlje
PHP konstrukt: stvaranje primjeraka klasePHP konstrukt: stvaranje primjeraka klase
Skriptni programski jezici: zadaci, značajke i prednostiSkriptni programski jezici: zadaci, značajke i prednosti
Rekurzivni algoritam: opis, analiza, značajke i primjeriRekurzivni algoritam: opis, analiza, značajke i primjeri
Što je proceduralno programiranje?Što je proceduralno programiranje?
Programiranje u Pythonu: PopisProgramiranje u Pythonu: Popis
Ulaz i izlaz u Pythonu. Ulaz i ispisUlaz i izlaz u Pythonu. Ulaz i ispis
» » Objektno orijentirano programiranje u Pythonu: klase, opis i značajke
LiveInternet