Pythoni klassid ja objektid - objektile orienteeritud programmeerimine



See „Pythoni klassi” ajaveeb käsitleb klassi, atribuudi ja mitmesuguste OOPS-i kontseptsioonide aluseid, nagu pärimine, polümorfism ja kapseldumine.

Pärast seda, kui Stack Overflow ennustas, et 2019. aastaks ületab Python aktiivsete arendajate osas nõudluse ainult kasvab.Python järgib objektorienteeritud programmeerimise paradigmat. See tegeleb pythoni klasside deklareerimisega, neist objektide loomise ja kasutajatega suhtlemisega. Objektorienteeritud keeles on programm jagatud iseseisvateks objektideks või võite öelda mitmeks miniprogrammiks. Iga objekt esindab rakenduse erinevat osa, mis saab omavahel suhelda.
Selles pythoni klassi ajaveebis saate aru klasside ja objektide igast aspektist järgmises järjestuses:

Alustame.:-)





Mis on Pythoni klass?

Klass pythonis on plaan, millest konkreetsed objektid luuakse. See võimaldab teil oma tarkvara struktureerida teatud viisil. Siit tuleb küsimus, kuidas? Klassid võimaldavad meil oma andmeid loogiliselt rühmitada ja funktsioneerida nii, et neid oleks lihtne taaskasutada, ja vajadusel edasi arendada. Mõelge allolevale pildile.

ClassesAndObjects - Pythoni klass - EdurekaEsimesel pildil (A) tähistab see maja kavandit, mida võib pidada Klass . Sama kavandiga saame luua mitu maja ja neid võib pidada Objektid . Klassi kasutades saate lisada oma programmidele järjepidevuse, et neid saaks kasutada puhtamal ja tõhusamal viisil. Atribuudid on andmeliikmed (klassi muutujad ja eksemplari muutujad) ja meetodid, millele pääseb juurde punktmärkimise kaudu.



  • Klassi muutuja on muutuja, mida jagavad kõik klassi erinevad objektid / eksemplarid.
  • Eksemplari muutujad on muutujad, mis on igale eksemplarile ainulaadsed. See on määratletud meetodi sees ja kuulub ainult klassi praegusesse eksemplari.
  • Meetodid nimetatakse ka klassis määratletud funktsioonideks, mis kirjeldavad objekti käitumist.

Nüüd liigume edasi ja vaatame, kuidas see PyCarmis töötab. Alustamiseks vaadake kõigepealt Python-klassi süntaksit.

Süntaks :

klass Klassi_nimi: lause-1. . avaldus-N

Siin kuvatakse klass ” lause loob uue klassi definitsiooni. Klassi nimi järgneb kohe märksõnale “ klass ” pütoonis, millele järgneb jämesool. Püütonis klassi loomiseks kaaluge järgmist näidet:



klassi töötaja: pass #no atribuudid ja meetodid emp_1 = töötaja () emp_2 = töötaja () #instance muutuja saab käsitsi luua emp_1.first = 'aayushi' emp_1.last = 'Johari' emp_1.email='aayushi@edureka.co 'emp_1.pay = 10000 emp_2.first =' test 'emp_2.last =' abc 'emp_2.email='test@company.com' emp_2.pay = 10000 print (emp_1.email) print (emp_2.email)

Väljund -

aayushi@edureka.co test@company.com

mis on javas vektor

Mis siis saab, kui me ei soovi neid muutujaid käsitsi seada. Näete palju koodi ja ka see on altid vigadele. Nii et selle automaatseks muutmiseks võime kasutada meetodit „init“. Selleks mõistame, mis täpselt on Pythoni klassi meetodid ja atribuudid.

Meetodid ja atribuudid Pythoni klassis

Nüüd on klassi loomine poolik ilma funktsionaalsuseta. Nii saab funktsionaalsusi määratleda, määrates erinevad atribuudid, mis toimivad nende atribuutidega seotud andmete ja funktsioonide konteinerina. Pythoni funktsioone nimetatakse ka kui Meetodid . Rääkides selles meetod , see on erifunktsioon, mida kutsutakse alati, kui selle klassi uus objekt on loodud. Võite mõelda sellele kui lähtestusmeetodile või võite seda pidada konstruktoriteks, kui olete pärit mõnelt muult objektorienteeritud programmeerimise taustalt, näiteks C ++, Java jne. Kui me määrame meetodi klassi sees, saavad nad eksemplari automaatselt. Läheme edasi Pythoni klassiga ja aktsepteerime selle meetodi abil eesnime, perekonnanime ja palka.

klassi töötaja: def __init __ (ise, esimene, viimane, sal): ise.nimi = esimene ise.nimi = viimane ise.sal = sal ise.post = esimene + '.' + viimane + '@ company.com' emp_1 = töötaja ('aayushi', 'johari', 350000) emp_2 = töötaja ('test', 'test', 100000) print (emp_1.epost) print (emp_2.epost)

Nüüd oleme oma 'init' meetodi raames määranud need eksemplarimuutujad (ise, esimene, viimane, sal). Ise on näide, mis tähendab, et alati, kui kirjutame ise.enimi = esimene, on see sama mis emp_1.first = ’aayushi’. Seejärel oleme loonud töötajate klassi eksemplarid, kus saame edastada init-meetodis määratud väärtused. See meetod võtab argumente argumentidena. Selle asemel, et seda käsitsi teha, tehakse seda automaatselt nüüd.

Järgmisena soovime võime teha mingisuguseid toiminguid. Selleks lisame a meetod sellesse klassi. Oletame, et soovin, et funktsioon kuvaks töötaja täieliku nime. Rakendagem seda praktiliselt.

klassi töötaja: def __init __ (ise, esimene, viimane, sal): ise.nimi = esimene ise.nimi = viimane ise.sal = sal ise.post = esimene + '.' + last + '@ company.com' def fullname (self): return '{} {}'. format (self.fname, self.lname) emp_1 = töötaja ('aayushi', 'johari', 350000) emp_2 = töötaja ('test', 'test', 100000) print (emp_1.email) print (emp_2.email) print (emp_1.fullname ()) print (emp_2.fullname ())

Väljund-

aayushi.johari@company.com test.test@company.com aayushijohari testtest

Nagu ülal näete, olen klassis loonud meetodi, mille nimi on 'täisnimi'. Seega võtab iga pythoni klassi sees olev meetod automaatselt esimese argumendina eksemplari. Nüüd olen selle meetodi raames kirjutanud loogika täisnime printimiseks ja selle tagastamiseks emp_1 ees- ja perekonnanime asemel. Järgmisena olen kasutanud “mina”, et see töötaks kõigi eksemplaridega. Selle printimiseks kasutame iga kord a meetod .

Pythoni klassidega edasi liikudes on muutujaid, mida jagatakse kõigi klassi eksemplaride vahel. Neid nimetatakse kui klassi muutujad . Eksemplari muutujad võivad olla iga eksemplari jaoks ainulaadsed, näiteks nimed, e-posti aadress, sal jne. Keeruline? Mõistame seda näite abil. Palga aastase tõusu väljaselgitamiseks vaadake allolevat koodi.

klassi töötaja: perc_raise = 1.05 def __init __ (ise, esimene, viimane, sal): ise.enimi = esimene ise.nimi = viimane ise.sal = sal ise.post = esimene + '.' + last + '@ company.com' def täisnimi (ise): tagastage '{} {}'. vorming (self.fname, self.nimi) def apply_raise (self): self.sal = int (self.sal * 1.05 ) emp_1 = töötaja ('aayushi', 'johari', 350000) emp_2 = töötaja ('test', 'test', 100000) print (emp_1.sal) emp_1.apply_raise () print (emp_1.sal)

Väljund-

350000 367500

Nagu eespool näha, olen kõigepealt palga välja printinud ja seejärel 1,5% tõusu rakendanud. Nendele klassi muutujatele juurde pääsemiseks peame neile kas klassi või klassi eksemplari kaudu juurde pääsema. Mõistkem nüüd Pythoni klassi erinevaid atribuute.

Atribuudid Pythoni klassis

Atribuudid Pythonis määratleb objekti, elemendi või faili atribuudi. Atribuute on kahte tüüpi:

  • Sisseehitatud klassi atribuudid: Pythoni klassides on mitmesuguseid sisseehitatud atribuute. Näiteks _dict_, _doc_, _name _ jne. Lubage mul võtta sama näide, kus ma tahan vaadata kõiki töötaja võtme-väärtuste paare1. Selleks võite lihtsalt kirjutada allpool oleva lause, mis sisaldab klassi nimeruumi:

    print (emp_1 .__ dict__)

    Pärast selle käivitamist saate väljundi nagu: {’fname’: ‘aayushi’, ‘lname’: ‘johari’, ‘sal’: 350000, ’email’: ‘aayushi.johari@company.com’}

  • Kasutajate määratletud atribuudid : Atribuudid luuakse klassi definitsiooni sees. Saame klassi olemasolevatele eksemplaridele dünaamiliselt luua uusi atribuute. Atribuute saab siduda ka klasside nimedega.

Järgmisena oleme avalik, kaitstud ja privaatne atribuudid. Mõistame neid üksikasjalikult:

Nimetamine Tüüp Tähendus
NimiAvalikNeid atribuute saab vabalt kasutada klassi määratluses või väljaspool seda
_nimiKaitstudKaitstud atribuute ei tohiks kasutada väljaspool klassi definitsiooni, välja arvatud juhul, kui see on alamklassi definitsioonis
__nimiPrivaatneSelline atribuut on kättesaamatu ja nähtamatu. Neid atribuute pole võimalik lugeda ega kirjutada, välja arvatud klassi definitsiooni enda sees


Järgmisena mõistame Pythoni klassi kõige olulisemat komponenti, st objekte.

Mis on Pythoni klassi objektid?

Nagu me eespool arutlesime, saab objekti kasutada erinevatele atribuutidele juurdepääsemiseks. Seda kasutatakse klassi eksemplari loomiseks. Eksemplar on käitamise ajal loodud klassi objekt.

To annan sulle kiire ülevaate, objekt on põhimõtteliselt kõik, mida sa näed. Näiteks: koer on loomaklassi objekt, mina olen inimklassi objekt. Samamoodi võivad samas telefoniklassis olla erinevad objektid.See on üsna sarnane funktsioonikutsega, mida oleme juba arutanud. Mõistame seda näite abil:

klass MyClass: def func (self): print ('Hello') # loo uus MyClass ob = MyClass () ob.func ()

Püütoniklassiga edasi liikudes mõistame erinevaid OOP-ide mõisteid.

OOP-ide mõisted

OOP-d viitavad Pythoni objektile orienteeritud programmeerimisele. Noh, Python pole täielikult objektile orienteeritud, kuna see sisaldab mõningaid protseduurifunktsioone. Nüüd peate kindlasti mõtlema, mis vahe on protseduurilisel ja objektorienteeritud programmeerimisel. Teie kahtluse selgitamiseks kirjutatakse protseduuriprogrammides kogu kood ühte pika protseduuri, kuigi see võib sisaldada funktsioone ja alamprogramme. Seda ei saa hallata, kuna nii andmed kui ka loogika segunevad. Aga kui me räägime objektorienteeritud programmeerimisest, jaguneb programm iseseisvateks objektideks või mitmeks miniprogrammiks. Iga objekt esindab rakenduse erinevat osa, millel on oma andmed ja loogika omavahel suhtlemiseks. Näiteks on veebisaidil erinevaid objekte, nagu pildid, videod jne.
Objektorienteeritud programmeerimine hõlmab Pythoni klassi, objekti, pärandi, polümorfismi, abstraktsiooni jne mõistet. Mõistame neid teemasid üksikasjalikult.

Pythoni klass: pärand

Pärimine võimaldab meil pärida atribuudid ja meetodid baas- / vanemklassist. See on kasulik, kuna saame luua alamklasse ja hankida kõik funktsioonid oma vanemklassist. Siis saame vanemat klassi mõjutamata üle kirjutada ja lisada uusi funktsionaalsusi. Mõistame näite abil vanemateklassi ja lasteklassi mõistet.

Nagu pildilt näeme, pärib laps omadused isalt. Samamoodi on pythonis kaks klassi:

kuidas deklareerida java objektide massiivi

1. Vanemklass (super- või baasklass)

2. Lasteklass (alaklass või tuletatud klass)

Klass, mis pärib omadused, on tuntud kui Laps Klass, samas kui klass, mille omadused on päritud, on tuntud kui Vanem klass.

Pärand viitab loomisvõimele Alamklassid mis sisaldavad nende vanemate erialasid. See jaguneb veel nelja tüüpi, nimelt ühe-, mitmetasandiline, hierarhiline ja mitmekordne pärand. Parema arusaamise saamiseks vaadake allolevat pilti.

Vaatame edasi Pythoni klassi ja mõistame, kuidas pärimine on kasulik.

Ütleme, ma tahan luua klassid töötajate tüüpidele. Loon alakategooriatena arendajad ja juhid, kuna nii arendajatel kui ka juhtidel on nimi, e-posti aadress ja palk ning kõik need funktsioonid on olemas töötajate klassis. Niisiis, selle asemel, et kopeerida alamklasside koodi, saame koodi töötajalt pärides lihtsalt taaskasutada.

klassi töötaja: arv_töötaja = 0 tõsta_summa = 1,04 def __init __ (ise, esimene, viimane, sal): ise.esimene = esimene ise.viimas = viimane ise.sal = sal ise.post = esimene + '.' + last + '@ company.com' worker.num_employee + = 1 def fullname (self): return '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) klassi arendaja (töötaja): pass emp_1 = arendaja ('aayushi', 'johari', 1000000) print (emp_1.email)
 Väljund - aayushi.johari@company.com

Nagu ülaltoodud väljundist näha, on arendajaklassis saadaval kõik töötajate klassi üksikasjad.Mis siis saab, kui ma tahan muuta arendaja tõstmise summa väärtuseks 10%? vaatame, kuidas seda praktiliselt teha saab.

klassi töötaja: arv_töötaja = 0 tõsta_summa = 1,04 def __init __ (ise, esimene, viimane, sal): ise.esimene = esimene ise.viimas = viimane ise.sal = sal ise.post = esimene + '.' + last + '@ company.com' worker.num_employee + = 1 def fullname (self): return '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * tõsta_summa) klassi arendaja (töötaja): tõsta_summa = 1,10 emp_1 = arendaja ('aayushi', 'johari', 1000000) print (emp_1.raise_amount)
 Väljund - 1.1

Nagu näete, on see ajakohastanud palgatõusu protsentuaalselt 4% -lt 10% -le.Kui ma tahan lisada veel ühe atribuudi, öelgem meie init-meetodis programmeerimiskeelt, kuid seda pole meie vanemklassis. Kas sellele on lahendus? Jah! saame kopeerida kogu töötaja loogika ja seda teha, kuid see suurendab jällegi koodi suurust. Nii et selle vältimiseks kaalume järgmist koodi:

klassi töötaja: arv_töötaja = 0 tõsta_summa = 1,04 def __init __ (ise, esimene, viimane, sal): ise.esimene = esimene ise.viimas = viimane ise.sal = sal ise.post = esimene + '.' + last + '@ company.com' worker.num_employee + = 1 def fullname (self): return '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( ise.sal * tõsta_summa) klassi arendaja (töötaja): tõsta_summa = 1,10 def __init __ (ise, esimene, viimane, sal, prog_lang): super () .__ init __ (esimene, viimane, sal) ise.prog_lang = prog_lang emp_1 = arendaja ( 'aayushi', 'johari', 1000000, 'python') print (emp_1.prog_lang)

võite kasutada kirjutusmasina klassi, et avada fail kirjutamiseks ja sinna andmete kirjutamiseks.

Seetõttu olen vaid vähese koodiga teinud muudatusi. Olen kasutanud super .__ init __ (esimene, viimane, maksmine), mis pärib omadused baasklassilt.Kokkuvõtteks võib öelda, et koodi taaskasutamiseks ja programmi keerukuse vähendamiseks kasutatakse pärimist.

Pythoni klass: polümorfism

Polümorfism arvutiteaduses on võime esitada sama liides erinevate aluseks olevate vormide jaoks. Praktikas tähendab polümorfism seda, et kui B-klass pärib A-klassist, ei pea see A-klassi pärima kõike, vaid saab teha mõningaid asju, mida A-klass teisiti teeb. Seda kasutatakse kõige sagedamini pärimisega tegelemisel. Python on vaikimisi polümorfne, tal on võime standardoperaatoreid üle koormata, nii et neil oleks kontekstist lähtuvalt sobiv käitumine.

Mõistame näite abil:

klass Loom: def __init __ (ise, nimi): ise.nimi = nimi def kõnelema (ise): läbima klassi Koer (Loom): def rääkima (ise): printima ('Woof') klass Kass (Loom): def rääkima ( ise): print ('MOW!') c = kass ('kiisu') c.talk () d = koer (loom) d.talk ()

Väljund -

Mjäu! Woof

Järgmisena liigume teise objektile orienteeritud programmeerimiskontseptsiooni juurde, st Abstraktsioon.

Pythoni klass: abstraktsioon

Abstraktsiooni kasutatakse keerulise reaalsuse lihtsustamiseks, modelleerides probleemile vastavaid klasse. Siin on meil abstraktne klass, mida ei saa instantsida. See tähendab, et te ei saa nende klasside jaoks objekte ega eksemplare luua. Seda saab kasutada ainult teatud funktsioonide pärimiseks, mida nimetate baasklassiks. Nii saate funktsioone pärida, kuid samal ajal ei saa te luua selle konkreetse klassi eksemplari. Mõistame abstraktse klassi mõistet allpool toodud näite abil:

abc-st impordi ABC, abstraktse meetodi klass Töötaja (ABC): @abstractmethod def calc__alary (self, sal): pass class Developer (Employee): def calc__salary (self, sal): finalalsary = sal * 1,10 return finalalsalary emp_1 = Developer () print [emp_1.calculate_salary (10000)]

Väljund-

11000,0

Nagu ülaltoodud väljundist näha, oleme suurendanud põhipalka 10% -ni, st palk on nüüd 11000. Kui nüüd tegelete edasi ja teete objekti „Töötaja“ objekti, viskab see vea, kuna python ei ei võimalda teil luua abstraktse klassi objekti. Kuid pärimise abil saate omadused pärida ja vastavaid ülesandeid täita.

Nii et poisid, see kõik käis lühidalt pütooni klasside ja objektide kohta. Oleme käsitlenud Pythoni klassi kõiki põhitõdesid, objekte ja erinevaid objektile orienteeritud kontseptsioone Pythonis, nii et võite hakata harjutama kohe. Loodan, et teile meeldis seda blogi lugeda Pythoni klassis ja teil on selge iga aspekt, mida ma eespool käsitlesin. Pärast pythoni klassi mõtlen välja veel Pythonis olevad ajaveebid, et scikit õppida raamatukogu ja massiivi. Püsige lainel!

Kas teil on meile küsimus? Palun mainige seda selle 'Pythoni klassi' ajaveebi kommentaaride osas ja võtame teiega ühendust niipea kui võimalik.

Pythoni ja selle erinevate rakenduste põhjalike teadmiste saamiseks saate seda teha meie reaalajas veebikoolitusega, millel on ööpäevaringne tugi ja juurdepääs kogu elule.