Python klases un objekti - uz objektu orientēta programmēšana



Šis emuārs vietnē “Python Class” nodarbojas ar klases, atribūtu un dažādu OOPS jēdzienu pamatiem, piemēram, mantošanu, polimorfismu un iekapsulēšanu.

Pēc tam, kad Stack Overflow paredzēja, ka līdz 2019. gadam Python pārspēs citas valodas aktīvo izstrādātāju ziņā, pieprasījums pēc tikai pieaug.Python ievēro objektorientētas programmēšanas paradigmu. Tas nodarbojas ar pitona klašu deklarēšanu, objektu izveidošanu no tām un mijiedarbību ar lietotājiem. Objektorientētā valodā programma tiek sadalīta atsevišķos objektos vai jūs varat teikt vairākās mini programmās. Katrs objekts attēlo citu lietojumprogrammas daļu, kas var savstarpēji sazināties.
Šajā pitona klases emuārā jūs sapratīsit katru klašu un objektu aspektu šādā secībā:

Sāksim.:-)





Kas ir Python klase?

Klase pitonā ir projekts, no kura tiek veidoti konkrēti objekti. Tas ļauj jums strukturēt programmatūru noteiktā veidā. Šeit rodas jautājums, kā? Nodarbības ļauj mums loģiski sagrupēt savus datus un darboties tā, lai tos būtu viegli atkārtoti izmantot, un, ja nepieciešams, veidoties. Apsveriet zemāk redzamo attēlu.

ClassesAndObjects - Python klase - EdurekaPirmajā attēlā (A) tas attēlo mājas projektu, kuru var uzskatīt par Klase . Ar to pašu projektu mēs varam izveidot vairākas mājas, un tās var uzskatīt par Objekti . Izmantojot klasi, varat pievienot savām programmām konsekvenci, lai tās varētu izmantot tīrāk un efektīvāk. Atribūti ir datu dalībnieki (klases mainīgie un gadījumu mainīgie) un metodes, kurām var piekļūt, izmantojot punktu apzīmējumu.



  • Klases mainīgais ir mainīgais, kas ir kopīgs visiem dažādiem klases objektiem / gadījumiem.
  • Gadījumu mainīgie ir mainīgie, kas ir unikāli katram gadījumam. Tas ir definēts metodes iekšienē un pieder tikai pašreizējam klases gadījumam.
  • Metodes tiek saukti arī par funkcijām, kas definētas klasē un apraksta objekta uzvedību.

Ļaujiet mums virzīties uz priekšu un redzēt, kā tas darbojas PyCharm. Lai sāktu, vispirms apskatiet pitona klases sintaksi.

Sintakse :

klase Klases_nosaukums: paziņojums-1. . paziņojums-N

Šeit “ klase ” paziņojums izveido jaunu klases definīciju. Nodarbības nosaukums tūlīt seko atslēgvārdam “ klase ” pitonā, kam seko kols. Lai izveidotu klasi pitonā, apsveriet šo piemēru:



klases darbinieks: pass #no atribūti un metodes emp_1 = darbinieks () emp_2 = darbinieks () #instance mainīgo var izveidot manuāli 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)

Rezultāts -

aayushi@edureka.co test@company.com

kā mainīt skaitli

Ko darīt, ja mēs nevēlamies manuāli iestatīt šos mainīgos. Jūs redzēsiet daudz koda, un arī tas ir pakļauts kļūdām. Tātad, lai padarītu to automātisku, mēs varam izmantot “init” metodi. Lai to izdarītu, sapratīsim, kas tieši ir metodes un atribūti pitona klasē.

Metodes un atribūti Python klasē

Tagad klases izveide ir nepilnīga bez kādas funkcionalitātes. Tātad funkcionalitātes var definēt, iestatot dažādus atribūtus, kas darbojas kā konteiners datiem un funkcijām, kas saistītas ar šiem atribūtiem. Funkcijas pitonā sauc arī par Metodes . Runājot par tajā metodi , tā ir īpaša funkcija, kuru izsauc ikreiz, kad tiek parādīts jauns šīs klases objekts. Jūs varat domāt par to kā inicializācijas metodi vai arī uzskatīt to par konstruktoriem, ja nākat no jebkura cita objektorientēta programmēšanas fona, piemēram, C ++, Java utt. Tagad, kad klasē iestatām metodi, viņi automātiski saņem instanci. Turpināsim ar pitona klasi un pieņemsim vārdu, uzvārdu un algu, izmantojot šo metodi.

klases darbinieks: def __init __ (self, first, last, sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.' + pēdējais + '@ company.com' emp_1 = darbinieks ('aayushi', 'johari', 350000) emp_2 = darbinieks ('test', 'test', 100000) druka (emp_1.email) druka (emp_2.email)

Tagad mūsu “init” metodē mēs esam iestatījuši šos instances mainīgos (self, first, last, sal). Self ir gadījums, kas nozīmē, ka vienmēr, kad mēs rakstām self.fname = pirmais, tas ir tas pats, kas emp_1.first = ’aayushi’. Tad mēs esam izveidojuši darbinieku klases gadījumus, kur mēs varam nodot init metodē norādītās vērtības. Šī metode izmanto argumentus kā gadījumus. Tā vietā, lai to izdarītu manuāli, tas tiks darīts automātiski tagad.

Tālāk mēs vēlamies iespēju veikt kādu darbību. Tam mēs pievienosim a metodi šai klasei. Pieņemsim, ka es vēlos, lai funkcionalitātē tiktu parādīts darbinieka pilns vārds. Tāpēc īstenosim to praktiski.

klases darbinieks: def __init __ (self, first, last, sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.' + last + '@ company.com' def fullname (self): return '{} {}'. format (self.fname, self.lname) emp_1 = darbinieks ('aayushi', 'johari', 350000) emp_2 = darbinieks ('test', 'test', 100000) print (emp_1.email) print (emp_2.email) print (emp_1.fullname ()) print (emp_2.fullname ())

Rezultāts-

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

Kā redzat iepriekš, es klasē esmu izveidojis metodi ar nosaukumu “pilns vārds”. Tātad katra metode pitona klasē automātiski automātiski pieņem instanci kā pirmo argumentu. Šīs metodes ietvaros esmu uzrakstījis loģiku, lai drukātu pilnu vārdu un atgrieztu šo vārdu emp_1 vārda un uzvārda vietā. Pēc tam es esmu izmantojis “sevi”, lai tas darbotos ar visiem gadījumiem. Tāpēc, lai to izdrukātu katru reizi, mēs izmantojam a metodi .

Virzoties uz priekšu ar Python klasēm, ir mainīgie, kas tiek koplietoti starp visiem klases gadījumiem. Tos sauc par klases mainīgie . Gadījumu mainīgie var būt unikāli katram gadījumam, piemēram, vārdi, e-pasts, sals utt. Sarežģīti? Sapratīsim to ar piemēru. Skatiet zemāk esošo kodu, lai uzzinātu gada algu pieaugumu.

klases darbinieks: perc_raise = 1.05 def __init __ (self, first, last, sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.' + last + '@ company.com' def fullname (self): return '{} {}'. format (self.fname, self.lname) def Apply_raise (self): self.sal = int (self.sal * 1.05 ) emp_1 = darbinieks ('aayushi', 'johari', 350000) emp_2 = darbinieks ('test', 'test', 100000) print (emp_1.sal) emp_1.apply_raise () print (emp_1.sal)

Rezultāts-

350000 367500

Kā redzat iepriekš, vispirms esmu drukājis algu un pēc tam piemērojis 1,5% palielinājumu. Lai piekļūtu šiem klases mainīgajiem, mums tiem vai nu ir jāpiekļūst, izmantojot klasi vai klases instanci. Tagad sapratīsim dažādus atribūtus pitona klasē.

Atribūti Python klasē

Atribūti Python definē objekta, elementa vai faila rekvizītu. Ir divu veidu atribūti:

  • Iebūvētie klases atribūti: Python klasēs ir dažādi iebūvēti atribūti. Piemēram, _dict_, _doc_, _name _ utt. Ļaujiet man ņemt to pašu piemēru, kur es vēlos apskatīt visus darbinieka atslēgas vērtību pārus1. Lai to izdarītu, varat vienkārši uzrakstīt zemāk esošo paziņojumu, kurā ir klases nosaukumvieta:

    izdrukāt (emp_1 .__ dict__)

    Pēc tā izpildes jūs iegūsiet tādu izvadi kā: {’fname’: ‘aayushi’, ‘lname’: ‘johari’, ‘sal’: 350000, ’email’: ‘aayushi.johari@company.com’}

  • Lietotāju noteikti atribūti : Atribūti tiek izveidoti klases definīcijā. Mēs varam dinamiski izveidot jaunus atribūtus esošajiem klases gadījumiem. Atribūtus var saistīt arī ar klases nosaukumiem.

Tālāk mums ir publiski, aizsargāti un Privāts atribūti. Sapratīsim tos detalizēti:

Nosaukšana Tips Nozīme
NosaukumsPublisksŠos atribūtus var brīvi izmantot klases definīcijās vai ārpus tām
_nosaukumsAizsargātsAizsargātos atribūtus nedrīkst izmantot ārpus klases definīcijas, ja vien tas nav apakšklases definīcijā
__nosaukumsPrivātsŠāds atribūts nav pieejams un neredzams. Nav iespējams ne atribūtus lasīt, ne rakstīt, izņemot pašu klases definīciju


Tālāk sapratīsim vissvarīgāko komponentu pitona klasē, t.i., objektus.

Kas ir objekti Python klasē?

Kā mēs iepriekš apspriedām, objektu var izmantot, lai piekļūtu dažādiem atribūtiem. To izmanto, lai izveidotu klases instanci. Instants ir klases objekts, kas izveidots izpildes laikā.

kā izveidot singlu klasi java

To sniedziet ātru pārskatu, objekts būtībā ir viss, ko redzat apkārt. Piemēram: suns ir dzīvnieku klases objekts, es esmu cilvēku klases objekts. Tāpat vienā un tajā pašā tālruņu klasē var būt dažādi objekti.Tas ir diezgan līdzīgs funkciju izsaukumam, kuru mēs jau esam apsprieduši. Sapratīsim to ar piemēru:

klase MyClass: def func (self): print ('Hello') # izveidot jaunu MyClass ob = MyClass () ob.func ()

Pārejot uz priekšu ar pitona klasi, sapratīsim dažādos OOP jēdzienus.

OOP koncepcijas

OOPs attiecas uz objektorientētu programmēšanu Python. Nu, Python nav pilnībā orientēts uz objektu, jo tajā ir dažas procesuālās funkcijas. Tagad jums ir jābrīnās, kāda ir atšķirība starp procesuālo un objektorientēto programmēšanu. Lai novērstu jūsu šaubas, procesuālajā programmēšanā viss kods tiek ierakstīts vienā garā procedūrā, kaut arī tajā varētu būt funkcijas un apakšprogrammas. To nevar pārvaldīt, jo gan dati, gan loģika sajaucas. Bet, kad mēs runājam par objektorientētu programmēšanu, programma tiek sadalīta atsevišķos objektos vai vairākās mini programmās. Katrs objekts attēlo citu lietojumprogrammas daļu, kurai ir savi dati un loģika, lai sazinātos savā starpā. Piemēram, vietnei ir dažādi objekti, piemēram, attēli, videoklipi utt.
Uz objektu orientēta programmēšana ietver Python klases, objekta, mantojuma, polimorfisma, abstrakcijas uc jēdzienu. Sapratīsim šīs tēmas detalizēti.

Python klase: mantojums

Mantošana ļauj mums mantot atribūtus un metodes no bāzes / vecāku klases. Tas ir noderīgi, jo mēs varam izveidot apakšklases un iegūt visu funkcionalitāti no vecāku klases. Tad mēs varam pārrakstīt un pievienot jaunas funkcijas, neietekmējot vecāku klasi. Sapratīsim vecāku klases un bērnu klases jēdzienu ar piemēru.

Kā redzam attēlā, bērns manto īpašības no tēva. Līdzīgi arī pitonā ir divas klases:

1. Vecāku klase (Super vai Base klase)

2. Bērnu klase (apakšklase vai atvasināta klase)

Klase, kas pārmanto īpašības, ir pazīstama kā Bērns Klase, savukārt klase, kuras īpašības tiek mantotas, ir pazīstama kā Vecāks klasē.

Mantošana attiecas uz spēju radīt Apakšklases kas satur viņu vecāku specializācijas. To tālāk iedala četros veidos, proti, viena, daudzlīmeņu, hierarhiska un daudzkārtēja mantošana. Skatiet zemāk esošo attēlu, lai labāk izprastu.

Turpināsim ar pitona klasi un sapratīsim, kā mantošana ir noderīga.

Sakiet, es vēlos izveidot nodarbības darbinieku tipiem. Es izveidošu “izstrādātājus” un “vadītājus” kā apakšklases, jo gan izstrādātājiem, gan vadītājiem būs vārds, e-pasts un alga, un visas šīs funkcijas būs darbinieku klasē. Tātad, tā vietā, lai kopētu apakšklases kodu, mēs varam vienkārši atkārtoti izmantot kodu, mantojot no darbinieka.

klases darbinieks: num_employee = 0 paaugstināt_summa = 1.04 def __init __ (self, first, last, sal): self.first = pirmais self.last = pēdējais self.sal = sal self.email = first + '.' + pēdējais + '@ company.com' worker.num_employee + = 1 def pilns vārds (self): return '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) klases izstrādātājs (darbinieks): pass emp_1 = developer ('aayushi', 'johari', 1000000) print (emp_1.email)
 Rezultāts - aayushi.johari@company.com

Kā redzat iepriekš minētajā izvadē, visa informācija par darbinieku klasi ir pieejama izstrādātāju klasē.Ko darīt, ja es vēlos mainīt izstrādātāja paaugstināšanas summu uz 10%? redzēsim, kā to var izdarīt praktiski.

klases darbinieks: num_employee = 0 paaugstināt_summa = 1.04 def __init __ (self, first, last, sal): self.first = pirmais self.last = pēdējais self.sal = sal self.email = first + '.' + pēdējais + '@ company.com' worker.num_employee + = 1 def pilns vārds (self): return '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) klases izstrādātājs (darbinieks): raise_amount = 1.10 emp_1 = developer ('aayushi', 'johari', 1000000) print (emp_1.raise_amount)
 Rezultāts - 1.1

Kā redzat, tas ir atjauninājis algas pieaugumu procentos no 4% līdz 10%.Ja es vēlos pievienot vēl vienu atribūtu, sakiet, ka mūsu init metodē ir programmēšanas valoda, bet mūsu vecāku klasē tā nepastāv. Vai tam ir kāds risinājums? Jā! mēs varam nokopēt visu darbinieku loģiku un darīt to, bet tas atkal palielinās koda lielumu. Tāpēc, lai no tā izvairītos, ņemsim vērā tālāk norādīto kodu:

klases darbinieks: num_employee = 0 paaugstināt_summa = 1.04 def __init __ (self, first, last, sal): self.first = pirmais self.last = pēdējais self.sal = sal self.email = first + '.' + pēdējais + '@ company.com' worker.num_employee + = 1 def pilns vārds (self): return '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * paaugstināt_summa) klases izstrādātājs (darbinieks): paaugstināt_summa = 1.10 def __init __ (pats, pirmais, pēdējais, sal, prog_lang): super () .__ init __ (pirmais, pēdējais, sal) self.prog_lang = prog_lang emp_1 = izstrādātājs ( 'aayushi', 'johari', 1000000, 'python') druka (emp_1.prog_lang)

Tāpēc, veicot tikai nelielu koda daudzumu, esmu veicis izmaiņas. Esmu izmantojis super .__ init __ (pirmais, pēdējais, maksā), kas īpašumus pārmanto no pamatklases.Noslēgumā mantojums tiek izmantots koda atkārtotai izmantošanai un programmas sarežģītības samazināšanai.

Pitona klase: polimorfisms

Polimorfisms datorzinātnēs ir spēja uzrādīt vienu un to pašu saskarni dažādām pamatformām. Praktiski polimorfisms nozīmē, ka, ja B klase manto no A klases, tai nav jāiegūst viss, kas attiecas uz A klasi, tā var darīt dažas lietas, ko A klase dara savādāk. To visbiežāk izmanto, kad nodarbojas ar mantojumu. Python ir netieši polimorfs, tam ir iespēja pārslogot standarta operatorus, lai viņiem būtu atbilstoša uzvedība, pamatojoties uz viņu kontekstu.

Ļaujiet mums saprast ar piemēru:

klases dzīvnieks: def __init __ (sevis, vārds): sevis vārds = vārds def saruna (pats): nokārtot klasi Suns (dzīvnieks): def saruna (pats): drukāt ('Woof') klase Kaķis (dzīvnieks): def saruna pats): drukāt ('MOW!') c = Kaķis ('kaķēns') c.talk () d = Suns (Animal) d.talk ()

Rezultāts -

Mjau! Vau

Pēc tam pārejam uz citu objektorientētas programmēšanas koncepciju, t.i., abstrakciju.

Python klase: abstrakcija

Abstrakcija tiek izmantota, lai vienkāršotu sarežģītu realitāti, modelējot problēmai piemērotas klases. Šeit mums ir abstrakta klase, kuru nevar instantizēt. Tas nozīmē, ka šīm klasēm nevar izveidot objektus vai gadījumus. To var izmantot tikai noteiktu funkciju pārmantošanai, kuras jūs saucat par bāzes klasi. Tātad jūs varat mantot funkcionalitātes, bet tajā pašā laikā nevar izveidot šīs konkrētās klases instanci. Sapratīsim abstraktās klases jēdzienu, izmantojot tālāk sniegto piemēru.

from abc import ABC, abstractmethod class Darbinieks (ABC): @abstractmethod def aprēķināt_algu (self, sal): iziet klases Izstrādātājs (Employee): def aprēķināt_salary (self, sal): finalsalary = sal * 1.10 return finalalsalary emp_1 = Developer () print (emp_1.kalkulēt_alga (10000))

Rezultāts-

11000,0

Kā redzat iepriekš minētajā produkcijā, mēs esam palielinājuši pamatalgu līdz 10%, ti, alga tagad ir 11000. Tagad, ja jūs patiešām turpināt un izveidojat objektu “Darbinieks”, tas jums rada kļūdu, jo pitons to nedara neļauj jums izveidot abstraktas klases objektu. Bet, izmantojot mantojumu, jūs faktiski varat mantot īpašības un veikt attiecīgos uzdevumus.

Tātad, puiši, tas viss bija par pitona klasēm un objektiem īsumā. Mēs esam apskatījuši visus Python klases pamatus, objektus un dažādus objektorientētus jēdzienus pitonā, tāpēc jūs varat sākt praktizēt jau tagad. Es ceru, ka jums, puiši, patika lasīt šo emuāru vietnē “Python Class”, un jums ir skaidrs katrs aspekts, par kuru esmu runājis iepriekš. Pēc pitona klases es nākšu klajā ar vairākiem emuāriem Python, lai scikit mācītos bibliotēku un masīvu. Sekojiet līdzi!

Vai mums ir jautājums? Lūdzu, pieminējiet to šī “Python klases” emuāra komentāru sadaļā, un mēs sazināsimies ar jums pēc iespējas ātrāk.

Lai iegūtu padziļinātas zināšanas par Python kopā ar dažādām lietojumprogrammām, varat to izdarīt ar mūsu tiešsaistes tiešsaistes apmācību ar diennakts atbalstu un piekļuvi mūža garumā.

pārsūtīt failus uz EC2 Windows instanci