Razredi Pythona so temeljni pojem. Je osnova standardne knjižnice, dela najbolj priljubljenih programov in samega jezika. Če želite postati več kot le začetnik programer, morate razumeti bistvo in načelo dela z razredi in predmeti.
Kateri so razredi
To je osnovna programska komponenta PLO. V razredih Python se uporabljajo za izvajanje novih tipov objektov in so izdelani s posebnim razredom navodil. Navzven so podobni standardnim vgrajenim podatkovnim tipom, kot so številke ali zaporedja. Toda v predmetih razreda je pomembna razlika - ohranjanje dedovanja.
Objektno usmerjeno programiranje na Pythonu v celoti temelji na hierarhičnem dedovanju razredov. To je univerzalni način prilagajanja in ponovne uporabe kode. Vendar objektno usmerjen pristop ni obvezen. Python nima težav, ki dovoljujejo samo proceduralno in funkcionalno programiranje. Glavna naloga razredov v Pythonu je podatkovni paket in izvršljiva koda. Sintaktično so podobni izjavi def. Tako kot funkcije, ustvarjajo svoje imenske prostore, ki jih lahko večkrat kličete iz katerega koli dela programa. Zakaj jih potem potrebujejo? Razredi so močnejše in vsestransko orodje. Večino njihovega potenciala razkrivamo v času nastanka novih objektov.
Pomen razredov in načelo dedovanja
Vsak objekt ima svoj imenski prostor, ki ga je mogoče programirati, vnesti spremenljivke inustvarite vse funkcije. Obstajajo tudi atributi, podedovani iz razreda object.attribute. To je pomen OOP-a.
Zaradi dedovanja se ustvari drevo hierarhije. V praksi je to naslednje. Ko tolmač ustreza izrazu object.attribute, začne iskati prvi pojav atributa v podanem razredu. Brez atributa tolmač nadaljuje z iskanjem v vseh sorodnih razredih, ki so v zgornjem drevesu, v smeri od leve proti desni. Drevo iskanja vključuje:
superrazrede, ki so na vrhu hierarhije in izvajajo splošno vedenje; podrazredi - so spodaj; kopije - elementi programa z dednim vedenjem.Slika prikazuje drevo razreda Python. Primer kaže, da sta razreda 2 in 3 superrazredi. Na dnu sta dva primerka primerka 1 in 2 v sredini - podrazreda 1. Če pišete izraz Instance2.w, bo prisilil tolmača, da poišče vrednost atributa .w v naslednjem vrstnem redu:
instanca2; Razred1; Razred2; Razred3..w ime bo najdeno v superrazredu razreda 3. Pri OOP terminologiji to pomeni, da je instanca 2 "podedovala" atribut .w za Class3. Upoštevajte, da primerki na sliki podedujejo samo štiri atribute:. je na drevesu, ki je nižje od razreda 2.
Za Instance1.y in Instance2.y se atribut .y nahaja v razredu 1, kjer se iskanje ustavi, ker je edino mesto, kjer se pojavi. Za primerke Instance1.z in Instance2.z bo tolmač našel .z Razred 2ker se nahaja na drevesu levo od razreda 3. Za instanco2 bo ime .name atribut najdeno v Instance2 brez iskanja drevesa.Predzadnja točka je najpomembnejša. Prikazuje, kako razred 1 na novo opredeljuje atribut .x in nadomešča različico .x superklasa 2.
Predmeti, primerki in metode
. Razredi ustvarjajo nove tipe in predmete razreda v Pythonu so primerki. Na primer, vse celoštevilske spremenljivke pripadajo int. V jeziku OOP so primerki razreda int. Razredi so ustvarjeni z navodili in predmeti s klicanjem. Lahko shranjujejo podatke in imajo lastne funkcije ali razredne metode. Terminologija igra pomembno vlogo v Pythonu. S svojo pomočjo programerji razlikujejo neodvisne funkcije od tistih, ki pripadajo razredom. Spremenljivke, ki se nanašajo na objekte, se imenujejo polja. V PLO obstajata dve vrsti polj. Prva je spremenljivka, ki pripada celotnemu razredu, druga pa spremenljivke posameznih primerov. Polja in metode skupaj so atributi razreda. V Pythonu so zapisani v bloku kode po razredu ključnih besed.
Metode in vrednosti
Metode so funkcije z dodatnim lastnim imenom. Doda se na začetek seznama možnosti. Če želite spremenljivko lahko imenujemo drugo ime, vendar takšna pobuda med programerji ni dobrodošla. Self je standard, ki ga je v kodnem imenu lahko prepoznati. Poleg tega so bila nekatera razvojna okolja zasnovana za delo z njim. Da bi bolje razumeli pomen sebe v OOP, si zamislite, da imamo razred z imenom ClassA in metodo A:
razred ClassA; def metoda A (self, argument1 argument2).Objekt objekt A je primerek ClassA in klic metode izgleda takole:
objectA.methodA (argument1 argument2).Ko tolmač vidi ta korak, se samodejno pretvori na naslednji način: ClassA.methodA (objectA, argument1 argument2). To pomeni, da primerek razreda uporablja samo spremenljivko kot sklic nase.
Kako ustvariti spremenljivke, metode in primere razredov
Predlagamo, da se praktični primer razstavi iz interaktivne lupine Python. Ustvarjanje eksperimenta Prvi razred se začne z razredom pouka komponent:
razred Eksperiment Najprej: def setinf (self, value): # Metodo najprej ustvarimo z argumenti self.data = vrednost ]def display (self): # druga metoda print (self.data) # podatki za kopiranje.Po obveznem umiku je blok z zaprtimi navodili def, v katerem so objektnim objektom dodeljena imena setinf in display. Z njihovo pomočjo se ustvarijo atributi ExperimentPrivy.setinf in ExperimentPrivy.display. Vsako ime, ki dodeli vrednost najvišji ravni v ugnezdenem bloku, postane atribut. Da bi videli, kako metode delujejo, morate ustvariti dve primerki:
x = Experiment First () # Ustvarjeni sta dve kopiji; y = ExperimentPerfect () # Vsak je ločen imenski prostor.Na začetku vzorci ne shranjujejo nobenih podatkov in so popolnoma prazni. Vendar so povezani z njihovim razredom:
x.setinf ("Teach Python") # Pokliči metodo, v kateri self-x. y.setinf (314) # Ekvivalent: prvi poskus .setinf (y, 314)Če uporabljate ime primerkax, y se nanašajo na atribut objekta .setinf razreda razredov Experiment, nato pa interpreter vrne vrednost atributa razreda kot rezultat iskanja drevesa dedovanja.
x.display () # V x in y vaše vrednosti self.data Teach Python y.display () 314. )
Preobremenitveni operaterji
V Pythonu lahko razredi prenašajo operaterje izjav. S to možnostjo so kopije podobne vgrajenim podatkovnim tipom. Postopek je izvajanje metod s posebnimi imeni, ki se začnejo in končajo z dvojnim poudarjanjem. Razmislite o dejanju __init__ in __sub__. Prva metoda se imenuje konstruktor razreda. V Pythonu __init__ izvede operacijo ustvarjanja preobremenitvene kopije. Druga metoda __sub__ izvaja operacijo odštevanja.
class load: # ustvarja nov razred def __init __ (self, start): self.data = start def __sub __ (self, other): # copy minus other return Preobremenitev (self.data - drugo) # Rezultat bo nov primer A = preobremenitev#__ init __ (A, 10)
B = A - 2 #__ sub __ (B, 2) B. Podatki #B je nov primer razreda preobremenitve 8. Več o metodi __init__
Metoda __init__ najpogosteje se uporablja pri delu z razredi. Nepogrešljiv je za inicializacijo različnih predmetov. __init__ kliče ločeno. Pri ustvarjanju novega primerka metoda samodejno prejme argumente, navedene v oklepajih. Pri metodah preobremenitve lahko izvedete vse operacije z vgrajenimi podatkovnimi tipi. Večina se uporablja samo pri reševanju posebnih nalog, pri katerih je potrebno objektomsimulira obnašanje standardnih objektov. Metode so podedovane od nadrazredov in niso obvezne. V začetnih fazah je enostavno brez njih. Za popolno potopitev v programiranje in bistvo PLO-ja potrebujete veščine dela z operaterji.
__getitem__ metoda
Metoda __getitem__ premaga dostop do elementa indeksa. Če je podedovana ali je prisotna v definiciji razreda, bo indekser za vsako operacijo samodejno poklical. Na primer, ko se v izrazu prikaže primerek F za ekstrahiranje elementa z indeksom, kot je F [i], Pythonov tolmač kliče metodo __getitem__, pri čemer predmet F v prvem argumentu indeksira, v drugem pa je naveden v oglatih oklepajih. Naslednji razred "ExampleIndexation" vrne kvadrat vrednosti indeksa:
razred Primer: def __getitem __ (self, index): indeks povratka ** 2 F = PrimerIndexation () F # Izraz F [i] kliče F .__ getitem __ (i)