Python-klasser og objekter - objektorientert programmering



Denne bloggen på 'Python Class' tar for seg det grunnleggende om klasse, attributt og forskjellige OOPS-konsepter som arv, polymorfisme og innkapsling.

Etter at Stack Overflow forutsa at innen 2019 vil Python overgå andre språk når det gjelder aktive utviklere, etterspørselen etter bare vokser.Python følger objektorientert programmeringsparadigme. Det handler om å erklære python-klasser, lage objekter fra dem og samhandle med brukerne. På et objektorientert språk er programmet delt inn i selvstendige objekter, eller du kan si det i flere miniprogrammer. Hvert objekt representerer en annen del av applikasjonen som kan kommunisere seg imellom.
I denne python-klassebloggen vil du forstå hvert aspekt av klasser og objekter i følgende sekvens:

La oss komme i gang.:-)





Hva er en Python-klasse?

En klasse i python er tegningen der spesifikke objekter blir opprettet. Den lar deg strukturere programvaren din på en bestemt måte. Her kommer et spørsmål hvordan? Klasser tillater oss å logisk gruppere dataene våre og fungere på en måte som det er lett å bruke og en måte å bygge videre på hvis det er behov for det. Tenk på bildet nedenfor.

hva er * i kvm

ClassesAndObjects - Python-klasse - EdurekaI det første bildet (A) representerer det en tegning av et hus som kan betraktes som Klasse . Med samme tegning kan vi lage flere hus, og disse kan betraktes som Objekter . Ved å bruke en klasse kan du legge til konsistens i programmene dine slik at de kan brukes på renere og effektive måter. Attributtene er datamedlemmer (klassevariabler og forekomstvariabler) og metoder som nås via punktnotasjon.



  • Klassevariabel er en variabel som deles av alle de forskjellige objektene / forekomster av en klasse.
  • Forekomstvariabler er variabler som er unike for hver forekomst. Den er definert i en metode og tilhører bare den aktuelle forekomsten av en klasse.
  • Metoder kalles også som funksjoner som er definert i en klasse og beskriver oppførselen til et objekt.

La oss nå gå videre og se hvordan det fungerer i PyCharm. For å komme i gang, ta først en titt på syntaksen til en python-klasse.

Syntaks :

klasse Klassenavn: uttalelse-1. . uttalelse-N

Her er “ klasse' uttalelse skaper en ny klassedefinisjon. Navnet på klassen følger umiddelbart nøkkelordet “ klasse' i python som etterfølges av et kolon. For å lage en klasse i python, vurder eksemplet nedenfor:



klassemedarbeider: pass # ingen attributter og metoder emp_1 = ansatt () emp_2 = ansatt () #instansvariabel kan opprettes manuelt 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)

Produksjon -

aayushi@edureka.co test@company.com

Nå, hva om vi ikke vil sette disse variablene manuelt. Du vil se mye kode, og det er også utsatt for feil. Så for å gjøre det automatisk, kan vi bruke 'init' -metoden. For det, la oss forstå hva som er metoder og attributter i en python-klasse.

Metoder og attributter i en Python-klasse

Nå er det ikke fullført å lage en klasse uten noe funksjonalitet. Så funksjonaliteter kan defineres ved å sette forskjellige attributter som fungerer som en beholder for data og funksjoner relatert til disse attributtene. Funksjoner i python kalles også som Metoder . Snakker om i det metode , det er en spesiell funksjon som kalles når et nytt objekt i den klassen blir instansert. Du kan tenke på det som initialiseringsmetode, eller du kan betrakte dette som konstruktører hvis du kommer fra en annen objektorientert programmeringsbakgrunn som C ++, Java osv. Nå når vi setter en metode i en klasse, mottar de forekomsten automatisk. La oss gå videre med python-klasse og akseptere fornavn, etternavn og lønn ved hjelp av denne metoden.

klassemedarbeider: def __init __ (selv, første, siste, sal): self.fname = første self.lname = siste self.sal = sal self.email = første + '.' + siste + '@ company.com' emp_1 = ansatt ('aayushi', 'johari', 350000) emp_2 = ansatt ('test', 'test', 100000) utskrift (emp_1.email) utskrift (emp_2.email)

Nå innenfor 'init' -metoden har vi satt disse forekomstvariablene (selv, første, siste, sal). Selv er forekomsten som betyr når vi skriver self.fname = først, det er det samme som emp_1.first = ’aayushi’. Så har vi opprettet forekomster av ansattklasse der vi kan overføre verdiene som er angitt i init-metoden. Denne metoden tar forekomster som argumenter. I stedet for å gjøre det manuelt, vil det gjøres automatisk nå.

Deretter ønsker vi muligheten til å utføre en slags handling. For det vil vi legge til en metode til denne klassen. Anta at jeg vil at funksjonaliteten skal vise hele ansattets navn. Så la oss implementere dette praktisk.

klassemedarbeider: def __init __ (selv, første, siste, sal): self.fname = første self.lname = siste self.sal = sal self.email = første + '.' + siste + '@ company.com' def fullname (self): returner '{} {}'. format (self.fname, self.lname) emp_1 = ansatt ('aayushi', 'johari', 350000) emp_2 = ansatt ('test', 'test', 100000) print (emp_1.email) print (emp_2.email) print (emp_1.fullname ()) print (emp_2.fullname ())

Produksjon-

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

Som du kan se ovenfor, har jeg laget en metode som heter “fullt navn” i en klasse. Så hver metode i en python-klasse tar automatisk forekomsten som det første argumentet. Nå innenfor denne metoden har jeg skrevet logikken for å skrive ut fullt navn og returnere dette i stedet for emp_1 fornavn og etternavn. Deretter har jeg brukt “selv” slik at det fungerer med alle tilfeller. Derfor bruker vi en for å skrive ut dette hver gang metode .

Når vi går videre med Python-klasser, er det variabler som deles mellom alle forekomster av en klasse. Disse kalles som klassevariabler . Forekomstvariabler kan være unike for hver forekomst som navn, e-post, sal osv. Komplisert? La oss forstå dette med et eksempel. Se koden nedenfor for å finne ut den årlige lønnsøkningen.

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

Produksjon-

350000 367500

Som du kan se ovenfor, har jeg skrevet ut lønnen først og deretter brukt 1,5% økningen. For å få tilgang til disse klassevariablene, må vi enten få tilgang til dem gjennom klassen eller en forekomst av klassen. La oss nå forstå de forskjellige attributtene i en python-klasse.

Attributter i en Python-klasse

Attributter i Python definerer en egenskap for et objekt, element eller en fil. Det er to typer attributter:

  • Innebygde klasseegenskaper: Det er forskjellige innebygde attributter til stede i Python-klasser. For eksempel _dikt_, _dok_, _navn _ osv. La meg ta det samme eksemplet der jeg vil se alle nøkkelverdiparene til ansatt1. For det kan du ganske enkelt skrive utsagnet nedenfor som inneholder klassens navneområde:

    skriv ut (emp_1 .__ dict__)

    Etter å ha utført den, vil du få utdata som: {‘fname’: ‘aayushi’, ‘lname’: ‘johari’, ‘sal’: 350000, ‘email’: ‘aayushi.johari@company.com’}

  • Attributter definert av brukere : Attributter opprettes inne i klassedefinisjonen. Vi kan dynamisk opprette nye attributter for eksisterende forekomster av en klasse. Attributter kan også knyttes til klassenavn.

Neste har vi offentlig, beskyttet og privat attributter. La oss forstå dem i detalj:

Navngivning Type Betydning
NavnOffentligDisse attributtene kan brukes fritt innenfor eller utenfor en klassedefinisjon
_NavnBeskyttetBeskyttede attributter skal ikke brukes utenfor klassedefinisjonen, med mindre det er innenfor en underklassedefinisjon
__NavnPrivatDenne typen attributt er utilgjengelig og usynlig. Det er verken mulig å lese eller skrive disse attributtene, med unntak av selve klassedefinisjonen


Deretter, la oss forstå den viktigste komponenten i en python-klasse, dvs. objekter.

Hva er gjenstander i en Python-klasse?

Som vi har diskutert ovenfor, kan et objekt brukes til å få tilgang til forskjellige attributter. Den brukes til å lage en forekomst av klassen. En forekomst er et objekt av en klasse opprettet ved kjøretid.

To gi deg en rask oversikt, et objekt er i utgangspunktet alt du ser rundt. For eksempel: En hund er et objekt av dyreklassen, jeg er et objekt av den menneskelige klassen. På samme måte kan det være forskjellige objekter til samme telefonklasse.Dette er ganske likt et funksjonsanrop som vi allerede har diskutert. La oss forstå dette med et eksempel:

klasse MyClass: def func (selv): skriv ut ('Hello') # opprett en ny MyClass ob = MyClass () ob.func ()

La oss forstå de forskjellige OOP-konseptene når vi går videre med python-klassen.

OOPs-konsepter

OOPs refererer til den objektorienterte programmeringen i Python. Vel, Python er ikke helt objektorientert, da den inneholder noen prosessuelle funksjoner. Nå må du lure på hva som er forskjellen mellom en prosessuell og objektorientert programmering. For å fjerne tvilen din, i en prosessuell programmering, er hele koden skrevet i en lang prosedyre, selv om den kan inneholde funksjoner og underrutiner. Det er ikke håndterbart da både data og logikk blandes sammen. Men når vi snakker om objektorientert programmering, er programmet delt i selvstendige objekter eller flere miniprogrammer. Hvert objekt representerer en annen del av applikasjonen som har sine egne data og logikk for å kommunisere seg imellom. For eksempel har et nettsted forskjellige objekter som bilder, videoer etc.
Objektorientert programmering inkluderer begrepet Python-klasse, objekt, arv, polymorfisme, abstraksjon etc. La oss forstå disse emnene i detalj.

Python-klasse: Arv

Arv lar oss arve attributter og metoder fra basen / foreldreklassen. Dette er nyttig ettersom vi kan opprette underklasser og få all funksjonaliteten fra foreldreklassen vår. Da kan vi overskrive og legge til nye funksjoner uten å påvirke foreldreklassen. La oss forstå begrepet foreldreklasse og barneklasse med et eksempel.

Som vi kan se på bildet, arver et barn egenskapene fra faren. På samme måte er det i python to klasser:

1. Foreldreklasse (Super- eller baseklasse)

2. Barneklasse (underklasse eller avledet klasse)

installer php 7 på windows

En klasse som arver egenskapene er kjent som Barn Klasse mens en klasse hvis eiendommer er arvet er kjent som Forelder klasse.

Arv refererer til evnen til å skape Underklasser som inneholder spesialiseringer fra foreldrene sine. Det er videre delt inn i fire typer, nemlig enkle, flernivå, hierarkiske og flere arv. Se bildet nedenfor for å få en bedre forståelse.

La oss gå videre med python-klasse og forstå hvordan arv er nyttig.

kaste en dobbel til en int

Si, jeg vil lage klasser for typer ansatte. Jeg oppretter 'utviklere' og 'ledere' som underklasser, siden både utviklere og ledere vil ha navn, e-post og lønn, og alle disse funksjonene vil være der i arbeidstakerklassen. Så, i stedet for å kopiere koden for underklassene, kan vi bare bruke koden på nytt ved å arve fra den ansatte.

klassemedarbeider: num_medarbeider = 0 raise_amount = 1.04 def __init __ (self, first, last, sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + siste + '@ company.com' ansatt.num_medarbeider + = 1 def fullnavn (selv): returner '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) klasseutvikler (ansatt): pass emp_1 = utvikler ('aayushi', 'johari', 1000000) print (emp_1.email)
 Produksjon - aayushi.johari@company.com

Som du kan se i utdataene ovenfor, er alle detaljene i medarbeiderklassen tilgjengelig i utviklerklassen.Hva nå om jeg vil endre høye beløpet for en utvikler til 10%? la oss se hvordan det kan gjøres praktisk.

klassemedarbeider: num_medarbeider = 0 raise_amount = 1.04 def __init __ (self, first, last, sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + siste + '@ company.com' ansatt.num_medarbeider + = 1 def fullnavn (selv): returner '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) klasseutvikler (ansatt): raise_amount = 1.10 emp_1 = utvikler ('aayushi', 'johari', 1000000) skriv ut (emp_1.raise_amount)
 Produksjon - 1.1

Som du kan se at den har oppdatert prosentvis lønnsøkning fra 4% til 10%.Hvis jeg nå vil legge til ett attributt til, si et programmeringsspråk i vår init-metode, men det eksisterer ikke i foreldreklassen vår. Er det noen løsning for det? Ja! vi kan kopiere hele ansattes logikk og gjøre det, men det vil igjen øke kodestørrelsen. Så for å unngå det, la oss vurdere koden nedenfor:

klassemedarbeider: num_medarbeider = 0 raise_amount = 1.04 def __init __ (self, first, last, sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + siste + '@ company.com' ansatt.num_medarbeider + = 1 def fullnavn (selv): returner '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) klasseutvikler (ansatt): raise_amount = 1,10 def __init __ (self, first, last, sal, prog_lang): super () .__ init __ (first, last, sal) self.prog_lang = prog_lang emp_1 = developer ( 'aayushi', 'johari', 1000000, 'python') utskrift (emp_1.prog_lang)

Derfor, med bare litt kode, har jeg gjort endringer. Jeg har brukt super .__ init __ (first, last, pay) som arver egenskapene fra basisklassen.For å konkludere, blir arv brukt til å gjenbruke koden og redusere kompleksiteten i et program.

Python-klasse: polymorfisme

Polymorfisme innen informatikk er evnen til å presentere det samme grensesnittet for forskjellige underliggende former. I praksis betyr polymorfisme at hvis klasse B arver fra klasse A, trenger den ikke å arve alt om klasse A, den kan gjøre noen av tingene som klasse A gjør annerledes. Det er mest brukt når du arbeider med arv. Python er implisitt polymorf, den har evnen til å overbelaste standardoperatører slik at de har passende oppførsel basert på sin kontekst.

La oss forstå med et eksempel:

klasse Animal: def __init __ (self, name): self.name = name def talk (self): pass class Dog (Animal): def talk (self): print ('Woof') class Cat (Animal): def talk ( selv): print ('MEOW!') c = Cat ('kitty') c.talk () d = Dog (Animal) d.talk ()

Utgang -

Mjau! Woof

La oss nå gå til et annet objektorientert programmeringskonsept, dvs. abstraksjon.

Python-klasse: Abstraksjon

Abstraksjon brukes til å forenkle kompleks virkelighet ved å modellere klasser som passer til problemet. Her har vi en abstrakt klasse som ikke kan instantiseres. Dette betyr at du ikke kan opprette objekter eller forekomster for disse klassene. Den kan bare brukes til å arve visse funksjoner som du kaller som en basisklasse. Så du kan arve funksjonaliteter, men samtidig kan du ikke opprette en forekomst av denne klassen. La oss forstå begrepet abstrakt klasse med et eksempel nedenfor:

fra abc import ABC, abstractmethod klasse Ansatt (ABC): @abstractmethod def beregne_lønn (selv, sal): pass klasse Utvikler (Ansatt): def beregne_lønn (selv, sal): finalalary = sal * 1.10 retur finalalary emp_1 = Developer () print (emp_1.calculate_salary (10000))

Produksjon-

11000,0

Som du kan se i ovennevnte produksjon, har vi økt grunnlønnen til 10%, dvs. lønnen er nå 11000. Hvis du faktisk fortsetter og lager et objekt i klassen 'Ansatt', kaster det deg en feil som python ikke gjør lar deg ikke lage et objekt av abstrakt klasse. Men ved å bruke arv kan du faktisk arve egenskapene og utføre de respektive oppgavene.

Så gutter, dette handlet om pythonklasser og gjenstander i et nøtteskall. Vi har dekket alt det grunnleggende om Python-klassen, objekter og forskjellige objektorienterte konsepter i python, slik at du kan begynne å øve nå. Jeg håper dere likte å lese denne bloggen på 'Python Class' og er tydelige på hvert eneste aspekt som jeg har diskutert ovenfor. Etter python-timen kommer jeg med flere blogger på Python for scikit-læringsbibliotek og array. Følg med!

Har du et spørsmål til oss? Vennligst nevn det i kommentarfeltet i denne 'Python Class' -bloggen, så kommer vi tilbake til deg så snart som mulig.

For å få inngående kunnskap om Python sammen med de forskjellige applikasjonene, kan du med vår online opplæring med 24/7 support og livstidstilgang.