„Python“ klasės ir objektai - į objektą orientuotas programavimas

Šiame „Python klasės“ tinklaraštyje kalbama apie klasės, atributo ir įvairių OOPS sąvokų, tokių kaip paveldėjimas, polimorfizmas ir inkapsuliacija, pagrindus.

„Stack Overflow“ prognozavus, kad iki 2019 m. „Python“ viršys kitas kalbas, kalbant apie aktyvius kūrėjus, tik auga.„Python“ vadovaujasi objektinio programavimo paradigma. Jis susijęs su python klasių deklaravimu, objektų kūrimu iš jų ir sąveika su vartotojais. Objektine kalba programa yra padalinta į savarankiškus objektus arba galima sakyti į kelias mini programas. Kiekvienas objektas atstovauja skirtingai programos daliai, kuri gali bendrauti tarpusavyje.
Šiame python klasės tinklaraštyje suprasite kiekvieną klasių ir objektų aspektą tokia seka:

Pradėkime.:-)





Kas yra „Python“ klasė?

„Python“ klasė yra projektas, iš kurio kuriami konkretūs objektai. Tai leidžia tam tikru būdu susisteminti savo programinę įrangą. Čia kyla klausimas, kaip? Klasės leidžia mums logiškai sugrupuoti savo duomenis ir veikti taip, kad juos būtų lengva pakartotinai naudoti, ir, jei reikia, tai remtis. Apsvarstykite žemiau esantį vaizdą.

„ClassesAndObjects“ - „Python“ klasė - „Edureka“Pirmajame paveikslėlyje (A) jis atspindi namo projektą, kurį galima laikyti Klasė . Pagal tą patį projektą galime sukurti kelis namus ir juos galima laikyti Objektai . Naudodami klasę, galite pridėti nuoseklumo savo programose, kad jas būtų galima naudoti švariau ir efektyviau. Šie atributai yra duomenų nariai (klasės kintamieji ir egzempliorių kintamieji) ir metodai, prie kurių galima prisijungti per taškų žymėjimą.



  • Klasės kintamasis yra kintamasis, kurį naudoja visi skirtingi klasės objektai / egzemplioriai.
  • Egzempliorių kintamieji yra kintamieji, unikalūs kiekvienam egzemplioriui. Jis apibrėžiamas metodo viduje ir priklauso tik dabartiniam klasės egzemplioriui.
  • Metodai taip pat vadinamos funkcijomis, kurios yra apibrėžtos klasėje ir apibūdina objekto elgesį.

Pažvelkime į priekį ir pažiūrėkime, kaip tai veikia „PyCharm“. Norėdami pradėti, pirmiausia pažvelkite į pitono klasės sintaksę.

Sintaksė :

klasė Klasės_pavadinimas: pareiškimas-1. . pareiškimas-N

Čia „ klasė' sakinys sukuria naują klasės apibrėžimą. Klasės pavadinimas iškart po žodžio „ klasė' pitone, po kurio yra dvitaškis. Norėdami sukurti „Python“ klasę, apsvarstykite toliau pateiktą pavyzdį:



klasės darbuotojas: perduoti #no atributus ir metodus emp_1 = darbuotojas () emp_2 = darbuotojas () #instance kintamąjį galima sukurti rankiniu būdu emp_1.first = 'aayushi' emp_1.last = 'Johari' emp_1.email='aayushi@edureka.co 'emp_1.pay = 10000 emp_2.first =' testas 'emp_2.last =' abc 'emp_2.email='test@company.com' emp_2.pay = 10000 print (emp_1.email) print (emp_2.email)

Rezultatas -

aayushi@edureka.co test@company.com

Ką daryti, jei nenorime nustatyti šių kintamųjų rankiniu būdu. Jūs pamatysite daug kodo, taip pat jis linkęs į klaidą. Taigi, kad jis būtų automatinis, galime naudoti „init“ metodą. Tam supraskime, kas tiksliai yra pitonų klasės metodai ir atributai.

Metodai ir atributai „Python“ klasėje

Dabar klasės kūrimas neužbaigtas be tam tikrų funkcijų. Taigi funkcionalumą galima apibrėžti nustatant įvairius atributus, kurie veikia kaip su šiais atributais susijusių duomenų ir funkcijų talpykla. Python funkcijos taip pat vadinamos Metodai . Kalbėdamas apie inic metodas , tai yra speciali funkcija, kuri iškviečiama kiekvieną kartą, kai sukuriamas naujas tos klasės objektas. Galite galvoti apie tai kaip inicializavimo metodą arba galite tai laikyti konstruktoriais, jei esate iš bet kokio kito objektyvaus programavimo fono, pvz., C ++, Java ir kt. Dabar, kai nustatome metodą klasės viduje, jie automatiškai gauna egzempliorių. Pradėkime nuo pitono klasės ir priimkime vardą, pavardę ir atlyginimą, naudodami šį metodą.

klasės darbuotojas: def __init __ (savarankiškas, pirmas, paskutinis, sal): sav.pavadinimas = pirmasis savęs.pavadinimas = paskutinis sav. + paskutinis + '@ company.com' emp_1 = darbuotojas ('aayushi', 'johari', 350000) emp_2 = darbuotojas ('test', 'test', 100000) spausdinti (emp_1.email) spausdinti (emp_2.email)

Pagal savo „init“ metodą mes nustatėme šiuos egzempliorių kintamuosius („self“, „first“, „last“, „sal“). „Aš“ yra tas egzempliorius, kuris reiškia, kad visada, kai rašome „self.fname = first“, tai yra tas pats, kas emp_1.first = ’aayushi’. Tada mes sukūrėme darbuotojų klasės egzempliorius, kur mes galime perduoti reikšmes, nurodytas init metode. Šis metodas egzempliorius laiko argumentais. Užuot tai darius rankiniu būdu, ji bus padaryta automatiškai dabar.

yra sas programavimo kalba

Toliau mes norime galimybės atlikti tam tikrą veiksmą. Tam pridėsime a metodas į šią klasę. Tarkime, kad noriu, kad funkcijoje būtų rodomas visas darbuotojo vardas. Taigi įgyvendinkime tai praktiškai.

klasės darbuotojas: def __init __ (savarankiškas, pirmas, paskutinis, sal): sav.pavadinimas = pirmasis savęs.pavadinimas = paskutinis sav. + last + '@ company.com' def fullname (self): return '{} {}'. format (self.fname, self.lname) emp_1 = darbuotojas ('aayushi', 'johari', 350000) emp_2 = darbuotojas („testas“, „testas“, 100000) spausdinti (emp_1.el.) spausdinti (emp_2.email) spausdinti (emp_1.vardas ()) print (emp_2.vardas ())

Rezultatas-

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

Kaip matote aukščiau, klasėje sukūriau metodą, pavadintą „visas vardas“. Taigi kiekvienas python klasės metodas automatiškai ima egzempliorių kaip pirmąjį argumentą. Taikydamas šį metodą, aš parašiau logiką spausdinti vardą ir grąžinti jį vietoj emp_1 vardo ir pavardės. Toliau aš naudojau „save“, kad jis veiktų su visais atvejais. Todėl, norėdami kaskart tai atspausdinti, naudojame a metodas .

Žengiant į priekį su „Python“ klasėmis, yra kintamųjų, kurie yra bendrinami tarp visų klasės egzempliorių. Jie vadinami klasės kintamieji . Egzempliorių kintamieji gali būti unikalūs kiekvienam egzemplioriui, pvz., Vardai, el. Pašto adresai, sal. Supraskime tai su pavyzdžiu. Peržiūrėkite žemiau esantį kodą, kad sužinotumėte metinį atlyginimo padidėjimą.

klasės darbuotojas: 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 = darbuotojas ('aayushi', 'johari', 350000) emp_2 = darbuotojas ('testas', 'testas', 100000) spausdinti (emp_1.sal) emp_1.apply_raise () print (emp_1.sal)

Rezultatas-

350000 367500

Kaip matote aukščiau, pirmiausia atspausdinau atlyginimą, o tada padidinau 1,5 proc. Norėdami pasiekti šiuos klasės kintamuosius, turime juos pasiekti per klasę arba klasės egzempliorių. Dabar supraskime įvairius pitono klasės atributus.

„Python“ klasės atributai

„Python“ atributai apibrėžia objekto, elemento ar failo ypatybes. Yra dviejų tipų atributai:

  • Įmontuoti klasės atributai: „Python“ klasėse yra įvairių integruotų atributų. Pvz., _Dict_, _doc_, _name _ ir kt. Leiskite paimti tą patį pavyzdį, kur noriu peržiūrėti visas darbuotojo raktų ir verčių poras1. Tam galite tiesiog parašyti žemiau pateiktą sakinį, kuriame yra klasės vardų sritis:

    spausdinti (emp_1 .__ dict__)

    Jį įvykdę gausite tokią išvestį kaip: {‘fname’: ‘aayushi’, ‘lname’: ‘johari’, ‘sal’: 350000, ‘email’: ‘aayushi.johari@company.com’}

  • Vartotojų apibrėžti atributai : Atributai kuriami klasės apibrėžimo viduje. Mes galime dinamiškai sukurti naujus atributus esamiems klasės egzemplioriams. Atributus galima susieti ir su klasių pavadinimais.

Toliau mes turime viešas, saugomas ir privatus atributus. Supraskime juos išsamiai:

kas yra pojo java
Pavadinimas Tipas Reikšmė
vardasViešasŠie atributai gali būti laisvai naudojami klasėje arba už jos ribų
_vardasSaugomaSaugomi atributai neturėtų būti naudojami už klasės apibrėžimo ribų, nebent jie yra poklasio apibrėžimo viduje
__vardasPrivatusŠis atributas yra nepasiekiamas ir nematomas. Negalima nei skaityti, nei rašyti tų atributų, išskyrus patį klasės apibrėžimą


Toliau supraskime svarbiausią pitono klasės komponentą, ty objektus.

Kas yra „Python“ klasės objektai?

Kaip jau aptarėme aukščiau, objektą galima naudoti norint pasiekti skirtingus atributus. Jis naudojamas kuriant klasės egzempliorių. Egzempliorius yra klasės objektas, sukurtas vykdymo metu.

To pateikite jums greitą apžvalgą, objektas iš esmės yra viskas, ką matote aplink. Pavyzdžiui, šuo yra gyvūnų klasės objektas, aš - žmonių klasės objektas. Panašiai tai pačiai telefonų klasei gali būti skirtingi objektai.Tai yra gana panašu į jau iškeltą funkcijos iškvietimą. Supraskime tai su pavyzdžiu:

class „MyClass“: def func (self): print ('Hello') # sukurkite naują „MyClass“ ob = „MyClass“ () ob.func ()

Pažvelkime į priekį su pitono klase, supraskime įvairias OOP koncepcijas.

OOP koncepcijos

OOP reiškia „Python“ programavimą į objektą. Na, „Python“ nėra visiškai orientuotas į objektą, nes jame yra keletas procedūrinių funkcijų. Dabar jūs turite pasidomėti, kuo skiriasi procedūrinis ir objektinis programavimas. Norint išaiškinti jūsų abejonę, atliekant procedūrinį programavimą, visas kodas įrašomas į vieną ilgą procedūrą, net jei jame gali būti funkcijos ir paprogramės. Tai nėra valdoma, nes tiek duomenys, tiek logika susimaišo. Bet kai kalbame apie objektinį programavimą, programa padalijama į savarankiškus objektus arba kelias mini programas. Kiekvienas objektas atstovauja skirtingai programos daliai, kuri turi savo duomenis ir logiką, kad galėtų tarpusavyje bendrauti. Pvz., Svetainėje yra įvairių objektų, tokių kaip vaizdai, vaizdo įrašai ir kt.
Į objektą orientuotas programavimas apima „Python“ klasės, objekto, paveldėjimo, polimorfizmo, abstrakcijos ir tt sampratą. Supraskime šias temas išsamiai.

„Python“ klasė: paveldėjimas

Paveldėjimas leidžia mums paveldėti atributus ir metodus iš pagrindinės / tėvų klasės. Tai naudinga, nes mes galime sukurti pogrupius ir gauti visas funkcijas iš savo tėvų klasės. Tada mes galime perrašyti ir pridėti naujų funkcijų, nepaveikdami tėvų klasės. Supraskime tėvų klasės ir vaikų klasės sampratą su pavyzdžiu.

Kaip matome paveikslėlyje, vaikas paveldi savybes iš tėvo. Panašiai ir pitone yra dvi klasės:

1. Tėvų klasė („Super“ arba „Base“ klasė)

2. Vaiko klasė (poklasis arba išvestinė klasė)

Savybės paveldi klasė yra žinoma kaip Vaikas Klasė, o klasė, kurios savybės yra paveldimos, yra žinoma kaip Tėvas klasė.

Paveldėjimas reiškia sugebėjimą kurti Pogrupiai kuriose yra jų tėvų specializacijos. Jis dar skirstomas į keturis tipus, būtent vieno, daugiapakopio, hierarchinio ir daugialypio paveldėjimo. Norėdami geriau suprasti, žiūrėkite žemiau esantį vaizdą.

Pažvelkime į pitono klasę ir supraskime, kaip paveldėjimas yra naudingas.

Tarkim, aš noriu sukurti klases darbuotojų tipams. Sukursiu „kūrėjus“ ir „vadovus“ kaip pogrupius, nes tiek kūrėjai, tiek vadybininkai turės vardą, el. Pašto adresą ir atlyginimą, o visos šios funkcijos bus darbuotojų klasėje. Taigi, užuot nukopijavę poklasių kodą, galime paprasčiausiai naudoti kodą paveldėdami iš darbuotojo.

klasės darbuotojas: num_employee = 0 pakelti_suma = 1.04 def __init __ (savarankiškai, pirmas, paskutinis, sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + 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) klasės kūrėjas (darbuotojas): pass emp_1 = kūrėjas ('aayushi', 'johari', 1000000) spausdinti (emp_1.el.laiškas)
 Rezultatas - aayushi.johari@company.com

Kaip matote aukščiau pateiktame išvestyje, visa darbuotojų klasės informacija yra prieinama kūrėjų klasėje.Ką daryti, jei noriu pakeisti kūrėjo pakėlimo sumą į 10%? pažiūrėkime, kaip tai galima padaryti praktiškai.

klasės darbuotojas: num_employee = 0 pakelti_suma = 1.04 def __init __ (savarankiškai, pirmas, paskutinis, sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + 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) klasės kūrėjas (darbuotojas): raise_amount = 1.10 emp_1 = developer ('aayushi', 'johari', 1000000) spausdinti (emp_1.raise_amount)
 Rezultatas - 1.1

Kaip matote, tai atnaujino atlyginimų padidėjimą procentais nuo 4% iki 10%.Dabar, jei noriu pridėti dar vieną atributą, tarkime, kad programavimo kalba yra mūsų init metodas, bet mūsų tėvų klasėje jo nėra. Ar yra koks nors sprendimas tam? Taip! galime nukopijuoti visą darbuotojo logiką ir tai padaryti, bet tai vėl padidins kodo dydį. Taigi, norėdami to išvengti, apsvarstykime žemiau pateiktą kodą:

klasės darbuotojas: num_employee = 0 pakelti_suma = 1.04 def __init __ (savarankiškai, pirmas, paskutinis, sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + 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) klasės kūrėjas (darbuotojas): raise_amount = 1.10 def __init __ (self, first, last, sal, prog_lang): super () .__ init __ (first, last, sal) self.prog_lang = prog_lang emp_1 = kūrėjas ( „aayushi“, „johari“, 1000000, „python“) spausdinti (emp_1.prog_lang)

Todėl, turėdamas tik šiek tiek kodo, atlikau pakeitimus. Aš naudojau super .__ init __ (pirmas, paskutinis, mokėk), kuris paveldi savybes iš pagrindinės klasės.Apibendrinant galima pasakyti, kad paveldėjimas naudojamas norint pakartotinai naudoti kodą ir sumažinti programos sudėtingumą.

Python klasė: polimorfizmas

Kompiuterijos polimorfizmas yra galimybė pateikti tą pačią sąsają skirtingoms pagrindinėms formoms. Praktiškai polimorfizmas reiškia, kad jei B klasė paveldi iš A klasės, ji neturi paveldėti visko, susijusios su A klase, ji gali atlikti kai kuriuos dalykus, kuriuos A klasė daro kitaip. Jis dažniausiai naudojamas sprendžiant paveldėjimą. „Python“ yra netiesiogiai polimorfiškas, jis gali perkrauti standartinius operatorius, kad jie elgtųsi tinkamai, atsižvelgdami į savo kontekstą.

Leiskite mums suprasti pavyzdį:

klasės gyvūnas: def __init __ (savęs, vardo): sav.vardas = vardas def pokalbis (pats): perduoti klasę Šuo (gyvūnas): def pokalbis (pats): spausdinti ('Woof') klasė Katė (gyvūnas): def pokalbis ( savarankiškai): spausdinti ('MOW!') c = katė ('kačiukas') c.talk () d = šuo (gyvūnas) d.talk ()

Rezultatas -

Miau! Vau

Toliau pereikime prie kitos į objektą orientuotos programavimo koncepcijos, ty abstrakcijos.

„Python“ klasė: abstrakcija

Abstrakcija naudojama supaprastinti tikrovę, modeliuojant problemai tinkamas klases. Čia mes turime abstrakčią klasę, kurios negalima iš karto nustatyti. Tai reiškia, kad negalite kurti objektų ar egzempliorių šioms klasėms. Jis gali būti naudojamas tik tam tikroms funkcijoms, kurias vadinate pagrindine klase, paveldėti. Taigi galite paveldėti funkcijas, tačiau tuo pačiu metu negalite sukurti šios konkrečios klasės egzemplioriaus. Supraskime abstrakčios klasės sąvoką pateikdami žemiau pateiktą pavyzdį:

from abc import ABC, abstractmethod class Darbuotojas (ABC): @abstractmethod def apskaičiuoti_salary (self, sal): pass class Developer (Employee): def apskaičiuoti_salary (self, sal): finalalary = sal * 1.10 return finalalsalary emp_1 = Developer () print (emp_1.calculate_salary (10000))

Rezultatas-

11000,0

Kaip matote aukščiau pateiktame išvestyje, mes padidinome bazinį atlyginimą iki 10%, ty atlyginimas dabar yra 11000. Dabar, jei jūs iš tikrųjų einate ir padarote „Darbuotojo“ klasės objektą, tai jums sukelia klaidą, nes „python“ nepadaro neleidžia jums sukurti abstrakčios klasės objekto. Bet naudodami paveldėjimą, jūs iš tikrųjų galite paveldėti savybes ir atlikti atitinkamas užduotis.

Taigi, vaikinai, viskas buvo apie pitonų klases ir objektus trumpai. Mes apėmėme visus „Python“ klasės pagrindus, objektus ir įvairias į objektą orientuotas sąvokas „Python“, todėl galite pradėti praktikuoti jau dabar. Tikiuosi, kad jums, vaikinai, patiko skaityti šį tinklaraštį „Python klasėje“, ir jums yra aišku apie kiekvieną aspektą, kurį aptariau aukščiau. Po „Python“ klasės aš pateiksiu daugiau „Python“ tinklaraščių, skirtų „scikit“ mokytis bibliotekai ir masyvui. Sekite naujienas!

Turite mums klausimą? Prašau tai paminėti šio „Python klasės“ tinklaraščio komentarų skyriuje ir mes kuo greičiau susisieksime su jumis.

kaip rasti palindromą java

Norėdami gauti išsamių žinių apie „Python“ kartu su įvairiomis jo programomis, galite su mūsų tiesioginėmis internetinėmis treniruotėmis, palaikančiomis visą parą ir visą parą.