Python-luokat ja objektit - olio-ohjelmointi



Tämä 'Python-luokan' blogi käsittelee luokan, attribuutin ja erilaisten OOPS-käsitteiden perusteita, kuten perintö, polymorfismi ja kapselointi.

Kun Stack Overflow ennusti, että vuoteen 2019 mennessä Python ylittää muut kielet aktiivisten kehittäjien suhteen, kysyntä kasvaa vain.Python noudattaa olio-ohjelmointiparadigmaa. Se käsittelee python-luokkien ilmoittamista, objektien luomista niistä ja vuorovaikutusta käyttäjien kanssa. Kohdekielisellä kielellä ohjelma on jaettu itsenäisiin kohteisiin tai voit sanoa useiksi mini-ohjelmiksi. Jokainen esine edustaa sovelluksen eri osaa, joka voi kommunikoida keskenään.
Tässä python-luokan blogissa ymmärrät luokkien ja objektien kaikki näkökohdat seuraavassa järjestyksessä:

Aloitetaan.:-)





Mikä on Python-luokka?

Luokka pythonissa on suunnitelma, josta tietyt objektit luodaan. Sen avulla voit rakentaa ohjelmiston tietyllä tavalla. Tässä tulee kysymys miten? Luokat antavat meille mahdollisuuden ryhmitellä tietomme ja toimia loogisesti tavalla, jota on helppo käyttää uudestaan ​​ja tapa rakentaa tarvittaessa. Harkitse alla olevaa kuvaa.

ClassesAndObjects - Python-luokka - EdurekaEnsimmäisessä kuvassa (A) se edustaa talon suunnitelmaa, jota voidaan pitää Luokka . Samalla suunnitelmalla voimme luoda useita taloja, joita voidaan pitää Esineet . Luokan avulla voit lisätä ohjelmiesi yhdenmukaisuutta, jotta niitä voidaan käyttää puhtaammalla ja tehokkaammalla tavalla. Attribuutit ovat datan jäseniä (luokan muuttujia ja ilmentymämuuttujia) ja menetelmiä, joihin pääsee pisteiden merkintöjen kautta.



  • Luokan muuttuja on muuttuja, jonka kaikki luokan objektit / esiintymät jakavat.
  • Ilmentymämuuttujat ovat muuttujia, jotka ovat yksilöllisiä kullekin esiintymälle. Se määritetään menetelmän sisällä ja kuuluu vain luokan nykyiseen esiintymään.
  • Menetelmät kutsutaan myös funktioksi, joka on määritelty luokassa ja kuvaa objektin käyttäytymistä.

Siirrytään nyt eteenpäin ja katsotaan, miten se toimii PyCharmissa. Aloita katsomalla ensin python-luokan syntaksit.

Syntaksi :

luokka Luokan_nimi: lause-1. . lausunto-N

Tässä ' luokka ” -lauseke luo uuden luokan määritelmän. Luokan nimi seuraa heti avainsanaa ” luokka ” pythonissa, jota seuraa kaksoispiste. Luodaksesi luokan pythoniin, ota huomioon seuraava esimerkki:



luokan työntekijä: pass #no -attribuutit ja -menetelmät emp_1 = työntekijä () emp_2 = työntekijä () #instance-muuttuja voidaan luoda manuaalisesti emp_1.first = 'aayushi' emp_1.last = 'Johari' emp_1.email='aayushi@edureka.co 'emp_1.pay = 10000 emp_2.first =' testi 'emp_2.last =' abc 'emp_2.email='test@company.com' emp_2.pay = 10000 tulosta (emp_1.email) tulosta (emp_2.email)

Tuotos -

aayushi@edureka.co test@company.com

Entä jos emme halua asettaa näitä muuttujia manuaalisesti. Näet paljon koodia ja myös se on altis virheille. Joten jotta se olisi automaattinen, voimme käyttää 'init' -menetelmää. Siksi ymmärretään, mitkä ovat menetelmät ja attribuutit python-luokassa.

Menetelmät ja määritteet Python-luokassa

Luokan luominen on keskeneräistä ilman toimintoja. Joten toiminnot voidaan määritellä asettamalla useita määritteitä, jotka toimivat säilönä näihin määritteisiin liittyville tiedoille ja toiminnoille. Pythonin toimintoja kutsutaan myös nimellä Menetelmät . Puhuminen sen sisällä menetelmä , se on erityinen toiminto, jota kutsutaan aina, kun kyseisen luokan uusi objekti on instantioitu. Voit ajatella sitä alustamismenetelmänä tai harkita tätä konstruktoreina, jos tulet muulta objektisuuntautuneelta ohjelmointitaustalta, kuten C ++, Java jne. Nyt kun asetamme menetelmän luokan sisällä, he vastaanottavat ilmentymän automaattisesti. Mennään eteenpäin python-luokalla ja hyväksytään etunimi, sukunimi ja palkka tällä menetelmällä.

luokan työntekijä: def __init __ (itse, ensimmäinen, viimeinen, sal): itse.nimi = ensimmäinen itse.nimi = viimeinen itse.sal = sal itsesähköposti = ensimmäinen + '.' + viimeinen + '@ company.com' emp_1 = työntekijä ('aayushi', 'johari', 350000) emp_2 = työntekijä ('test', 'test', 100000) tulosta (emp_1.email) tulosta (emp_2.email)

Nyt 'init' -menetelmässämme olemme asettaneet nämä esiintymämuuttujat (itse, ensimmäinen, viimeinen, sal). Itse on instanssi, joka tarkoittaa sitä, että aina kun kirjoitamme itse. Nimi = ensin, se on sama kuin emp_1.first = ’aayushi’. Sitten olemme luoneet työntekijäluokan esiintymiä, joissa voimme välittää init-menetelmässä määritetyt arvot. Tämä menetelmä käyttää instansseja argumentteina. Sen sijaan, että tekisit sen manuaalisesti, se tehdään automaattisesti nyt.

c ++ -operaattori

Seuraavaksi haluamme kyvyn suorittaa jonkinlainen toiminta. Tätä varten lisätään a menetelmä tähän luokkaan. Oletetaan, että haluan toiminnallisuuden näyttää työntekijän koko nimen. Joten toteutetaan tämä käytännössä.

luokan työntekijä: def __init __ (itse, ensimmäinen, viimeinen, sal): itse.nimi = ensimmäinen itse.nimi = viimeinen itse.sal = sal itsesähköposti = ensimmäinen + '.' + last + '@ company.com' def fullname (self): return '{} {}'. format (self.fname, self.lname) emp_1 = työntekijä ('aayushi', 'johari', 350000) emp_2 = työntekijä ('test', 'test', 100000) tulosta (emp_1.email) tulosta (emp_2.email) tulosta (emp_1.fullname ()) tulosta (emp_2.fullname ())

Tuotos-

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

Kuten yllä voit nähdä, olen luonut luokan 'koko nimi' -menetelmän. Joten jokainen python-luokan menetelmä ottaa ilmentymän automaattisesti ensimmäiseksi argumentiksi. Tällä menetelmällä olen kirjoittanut logiikan tulostaa koko nimi ja palauttaa tämä emp_1-etunimen ja sukunimen sijaan. Seuraavaksi olen käyttänyt 'itseä' niin, että se toimii kaikkien esiintymien kanssa. Siksi tämän tulostamiseen joka kerta käytämme a menetelmä .

Python-luokkien kanssa eteenpäin on muuttujia, jotka jaetaan luokan kaikkien esiintymien kesken. Näitä kutsutaan nimellä luokan muuttujat . Ilmentymämuuttujat voivat olla yksilöllisiä jokaiselle esiintymälle, kuten nimet, sähköpostiosoite, sal jne. Monimutkainen? Ymmärretään tämä esimerkillä. Katso alla oleva koodi selvittääksesi palkan vuotuisen nousun.

luokan työntekijä: 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 koko nimi (itse): return '{} {}'. format (self.fname, self.lname) def Apply_raise (self): self.sal = int (self.sal * 1.05 ) emp_1 = työntekijä ('aayushi', 'johari', 350000) emp_2 = työntekijä ('testi', 'testi', 100000) tulosta (emp_1.sal) emp_1.apply_raise () tulosta (emp_1.sal)

Tuotos-

350000 367500

Kuten yllä voit nähdä, olen ensin tulostanut palkan ja soveltanut sitten 1,5 prosentin korotusta. Näiden luokan muuttujien saamiseksi meidän on joko käytettävä niitä luokan tai luokan esiintymän kautta. Ymmärretään nyt python-luokan eri määritteet.

Attribuutit Python-luokassa

Pythonin attribuutit määrittävät objektin, elementin tai tiedoston ominaisuuden. Määritteitä on kahdenlaisia:

  • Sisäänrakennetut luokan määritteet: Python-luokissa on useita sisäänrakennettuja määritteitä. Esimerkiksi _dict_, _doc_, _name _ jne. Haluan ottaa saman esimerkin, jossa haluan tarkastella kaikkia työntekijän1 avainarvopareja. Tätä varten voit yksinkertaisesti kirjoittaa alla olevan lauseen, joka sisältää luokan nimiavaruuden:

    tulosta (emp_1 .__ dict__)

    Suorituksen jälkeen saat tuotoksen, kuten: {’fname’: ’aayushi’, ’lname’: ’johari’, ’sal’: 350000, ’email’: ’aayushi.johari@company.com’}

  • Käyttäjien määrittelemät attribuutit : Attribuutit luodaan luokan määritelmän sisällä. Voimme luoda dynaamisesti uusia määritteitä luokan olemassa oleville esiintymille. Attribuutit voidaan sitoa myös luokkien nimiin.

Seuraavaksi meillä on julkinen, suojattu ja yksityinen määritteet. Ymmärretään ne yksityiskohtaisesti:

Nimeäminen Tyyppi Tarkoitus
NimiJulkinenNäitä määritteitä voidaan käyttää vapaasti luokan määritelmän sisällä tai ulkopuolella
_nimiSuojattuSuojattuja määritteitä ei tule käyttää luokan määritelmän ulkopuolella, ellei alaluokan määritelmässä
__nimiYksityinenTällainen ominaisuus on saavuttamaton ja näkymätön. Näitä määritteitä ei ole mahdollista lukea eikä kirjoittaa, paitsi itse luokan määritelmässä


Seuraavaksi ymmärretään python-luokan tärkein komponentti eli objektit.

Mitä objektit ovat Python-luokassa?

Kuten olemme keskustelleet edellä, objektilla voidaan käyttää erilaisia ​​määritteitä. Sitä käytetään luokan esiintymän luomiseen. Esimerkki on luokan ajoaikana luotu objekti.

To antaa sinulle nopean yleiskuvan, esine on periaatteessa kaikki mitä näet ympärilläsi. Esimerkiksi: Koira on eläinluokan kohde, minä olen ihmisluokan kohde. Vastaavasti samassa puhelinluokassa voi olla erilaisia ​​esineitä.Tämä on melko samanlainen kuin toimintokutsu, josta olemme jo keskustelleet. Ymmärretään tämä esimerkillä:

class MyClass: def func (self): print ('Hello') # luo uusi MyClass ob = MyClass () ob.func ()

miten asentaa php 7

Python-luokan edetessä ymmärretään erilaisia ​​OOP-käsitteitä.

OOP: n käsitteet

OOPs viittaa olio-ohjelmointiin Pythonissa. No, Python ei ole täysin olio-suuntautunut, koska se sisältää joitain menettelytapoja. Nyt sinun on mietittävä, mikä on ero menettelyllisen ja olio-ohjelmoinnin välillä. Epäilyn selvittämiseksi, menettelykoodauksessa koko koodi kirjoitetaan yhdeksi pitkäksi menettelyksi, vaikka se saattaa sisältää toimintoja ja aliohjelmia. Sitä ei voida hallita, koska sekä data että logiikka sekoittuvat toisiinsa. Mutta kun puhumme olio-ohjelmoinnista, ohjelma jaetaan itsenäisiin kohteisiin tai useisiin mini-ohjelmiin. Jokainen esine edustaa sovelluksen eri osaa, jolla on omat tiedot ja logiikka kommunikoida keskenään. Esimerkiksi verkkosivustolla on erilaisia ​​esineitä, kuten kuvia, videoita jne.
Kohdekeskeinen ohjelmointi sisältää käsitteen Python-luokka, esine, perintö, polymorfismi, abstraktio jne. Ymmärretään nämä aiheet yksityiskohtaisesti.

Python-luokka: Perintö

Perintö antaa meille mahdollisuuden periä määritteet ja menetelmät perus- / vanhempaluokalta. Tämä on hyödyllistä, koska voimme luoda alaluokkia ja saada kaikki toiminnot vanhemmiltamme. Sitten voimme korvata ja lisätä uusia toimintoja vaikuttamatta vanhempien luokkaan. Ymmärretään esimerkki vanhempaluokan ja lapsiluokan käsitteestä.

Kuten voimme nähdä kuvasta, lapsi perii ominaisuudet isältä. Samoin pythonissa on kaksi luokkaa:

1. Vanhempainluokka (Super- tai Base-luokka)

2. Lapsiluokka (alaluokka tai johdettu luokka)

Ominaisuudet perivä luokka tunnetaan nimellä Lapsi Luokka kun taas luokka, jonka ominaisuudet peritään, tunnetaan nimellä Vanhempi luokassa.

Perintö viittaa kykyyn luoda Alaluokat jotka sisältävät vanhempiensa erikoistumista. Se on edelleen jaettu neljään tyyppiin, nimittäin yhden, monitasoisen, hierarkkisen ja moninkertaisen perinnön. Katso alla oleva kuva saadaksesi paremman käsityksen.

Mennään eteenpäin python-luokan kanssa ja ymmärretään, kuinka perintö on hyödyllistä.

Sanoin, että haluan luoda luokkia työntekijätyypeille. Luon kehittäjät ja esimiehet alaluokkiin, koska sekä kehittäjillä että johtajilla on nimi, sähköpostiosoite ja palkka, ja kaikki nämä toiminnot ovat siellä työntekijäluokassa. Joten sen sijaan, että kopioisimme alaluokkien koodin, voimme yksinkertaisesti käyttää koodia perimällä työntekijältä.

luokan työntekijä: num_employee = 0 korotettava_määrä = 1.04 def __init __ (itse, ensimmäinen, viimeinen, sal): self.first = ensimmäinen itse.viimeinen = viimeinen itse.sal = sal itse.sähköposti = ensimmäinen + '.' + viimeinen + '@ yritys.com' työntekijä.lukumiehen työntekijä + = 1 def koko nimi (itse): palauta '{} {}'. muoto (oma.ensimmäinen, itse.viimeinen) def Apply_raise (itse): itse.sal = int ( self.sal * raise_amount) luokan kehittäjä (työntekijä): pass emp_1 = kehittäjä ('aayushi', 'johari', 1000000) tulosta (emp_1.email)
 Tuotos - aayushi.johari@company.com

Kuten yllä olevasta tuotoksesta näet, kaikki työntekijäluokan yksityiskohdat ovat saatavilla kehittäjäluokassa.Entä jos haluan muuttaa kehittäjän korotussumman arvoksi 10%? Katsotaanpa, miten se voidaan tehdä käytännössä.

luokan työntekijä: num_employee = 0 korotettava_määrä = 1.04 def __init __ (itse, ensimmäinen, viimeinen, sal): self.first = ensimmäinen itse.viimeinen = viimeinen itse.sal = sal itse.sähköposti = ensimmäinen + '.' + viimeinen + '@ yritys.com' työntekijä.lukumiehen työntekijä + = 1 def koko nimi (itse): palauta '{} {}'. muoto (oma.ensimmäinen, itse.viimeinen) def Apply_raise (itse): itse.sal = int ( self.sal * nosta_määrä) luokan kehittäjä (työntekijä): nosta_määrä = 1,10 emp_1 = kehittäjä ('aayushi', 'johari', 1000000) tulosta (emp_1.raise_amount)
 Tuotos - 1.1

Kuten näette, se on päivittänyt palkan prosentuaalisen nousun 4 prosentista 10 prosenttiin.Nyt, jos haluan lisätä vielä yhden määritteen, sano ohjelmointikieli init-metodissamme, mutta sitä ei ole vanhempien luokassa. Onko siihen ratkaisua? Joo! voimme kopioida koko työntekijän logiikan ja tehdä sen, mutta se lisää koodikokoa jälleen. Joten tämän välttämiseksi, harkitsemme alla olevaa koodia:

cassandra-sarakeperhe vs taulukko
luokan työntekijä: num_employee = 0 korotettava_määrä = 1.04 def __init __ (itse, ensimmäinen, viimeinen, sal): self.first = ensimmäinen itse.viimeinen = viimeinen itse.sal = sal itse.sähköposti = ensimmäinen + '.' + viimeinen + '@ yritys.com' työntekijä.lukumiehen työntekijä + = 1 def koko nimi (itse): palauta '{} {}'. muoto (oma.ensimmäinen, itse.viimeinen) def Apply_raise (itse): itse.sal = int ( itse.sal * korotussumma) luokan kehittäjä (työntekijä): korotettava_määrä = 1,10 def __init __ (itse, ensimmäinen, viimeinen, sal, prog_lang): super () .__ init __ (ensimmäinen, viimeinen, sal) itse.prog_lang = prog_lang emp_1 = kehittäjä ( 'aayushi', 'johari', 1000000, 'python') tulosta (emp_1.prog_lang)

Siksi olen tehnyt vain vähän koodia, mutta olen tehnyt muutoksia. Olen käyttänyt super .__ init __ (ensimmäinen, viimeinen, maksa), joka perii ominaisuudet perusluokalta.Lopuksi, perintöä käytetään koodin uudelleenkäyttöön ja ohjelman monimutkaisuuden vähentämiseen.

Python-luokka: Polymorfismi

Tietojenkäsittelytieteen polymorfismi on kyky esittää sama rajapinta erilaisille taustalla oleville muodoille. Käytännössä polymorfismi tarkoittaa, että jos luokka B perii luokan A, sen ei tarvitse periä kaikkea luokasta A, se voi tehdä joitain asioita, joita luokka A tekee eri tavalla. Sitä käytetään yleisimmin perinnössä. Python on epäsuorasti polymorfinen, sillä on kyky ylikuormittaa standardioperaattoreita siten, että heillä on asianmukainen käyttäytyminen kontekstinsa perusteella.

Ymmärretään esimerkillä:

luokka Eläin: def __init __ (itse, nimi): itse.nimi = nimi def puhe (itse): läpäisee luokan Koira (Eläin): def puhe (itse): tulosta ('Woof') luokka Kissa (Eläin): def puhe ( itse): tulosta ('MEOW!') c = Kissa ('kisu') c.talk () d = Koira (Animal) d.talk ()

Tuotos -

Miau! Hau

Seuraavaksi siirrytään toiseen olio-ohjelmointikonseptiin eli abstraktioon.

Python-luokka: Abstraktio

Abstraktiota käytetään yksinkertaistamaan monimutkaista todellisuutta mallintamalla ongelmalle sopivia luokkia. Täällä meillä on abstrakti luokka, jota ei voida instantisoida. Tämä tarkoittaa, että et voi luoda esineitä tai esiintymiä näille luokille. Sitä voidaan käyttää vain perimään tiettyjä toimintoja, joita kutsut perusluokaksi. Joten voit periä toiminnallisuudet, mutta samalla et voi luoda tämän luokan ilmentymää. Ymmärretään abstraktin luokan käsite alla olevalla esimerkillä:

abc-tuonnista ABC, tiivistelmäluokka Työntekijä (ABC): @abstractmethod def laskea_palkka (itse, sal): läpäistävä luokka Kehittäjä (työntekijä): def laskea_palkka (itse, sal): loppuarvo = sal * 1,10 palata loppuosa emp_1 = Kehittäjä () tulosta (emp_1.calculate_salary (10000))

Tuotos-

11000,0

Kuten yllä olevasta tuotoksesta näet, olemme korottaneet peruspalkan 10%: iin, eli palkka on nyt 11000. Jos nyt jatkat ja teet objektin luokan ”Työntekijä”, se heittää sinulle virheen, koska python ei Älä anna sinun luoda abstraktin luokan objektia. Mutta perimällä voit itse periä ominaisuudet ja suorittaa vastaavat tehtävät.

Joten kaverit, tässä oli kyse python-luokista ja esineistä pähkinänkuoressa. Olemme käsittäneet kaikki Python-luokan perusteet, objektit ja erilaiset olio-käsitteet Pythonissa, joten voit aloittaa harjoituksen nyt. Toivon, että nautitte tämän blogin lukemisesta 'Python-luokassa' ja että olette selvillä kaikista edellä mainituista näkökohdista. Python-luokan jälkeen aion luoda lisää blogeja Pythonissa, jotta scikit-oppimiskirjasto ja -taulukko. Pysy kanavalla!

Onko sinulla kysymys meille? Mainitse se tämän “Python Class” -blogin kommenttiosassa ja otamme sinuun yhteyttä mahdollisimman pian.

Voit saada syvällistä tietoa Pythonista sen eri sovellusten kanssa suoralla verkkokoulutuksellamme, joka tarjoaa ympärivuorokautisen tuen ja elinikäisen pääsyn.