Python-klasser og objekter - objektorienteret programmering



Denne blog om 'Python Class' beskæftiger sig med de grundlæggende aspekter af klasse, attribut og forskellige OOPS-koncepter såsom arv, polymorfisme og indkapsling.

Efter Stack Overflow forudsagde, at inden 2019, vil Python overgå andre sprog med hensyn til aktive udviklere, efterspørgslen efter vokser kun.Python følger objektorienteret programmeringsparadigme. Det handler om at erklære python-klasser, skabe objekter ud fra dem og interagere med brugerne. På et objektorienteret sprog opdeles programmet i selvstændige objekter, eller du kan sige det i flere miniprogrammer. Hvert objekt repræsenterer en anden del af applikationen, som kan kommunikere indbyrdes.
I denne python-klasseblog vil du forstå hvert aspekt af klasser og objekter i følgende rækkefølge:

Lad os komme igang.:-)





Hvad er en Python-klasse?

En klasse i python er planen, hvorfra specifikke objekter oprettes. Det lader dig strukturere din software på en bestemt måde. Her kommer et spørgsmål hvordan? Klasser giver os mulighed for at logisk gruppere vores data og fungere på en måde, som det er let at genbruge og en måde at bygge videre på, hvis det er nødvendigt. Overvej nedenstående billede.

ClassesAndObjects - Python-klasse - EdurekaI det første billede (A) repræsenterer det en tegning af et hus, der kan betragtes som Klasse . Med den samme tegning kan vi oprette flere huse, og disse kan betragtes som Objekter . Ved hjælp af en klasse kan du tilføje konsistens til dine programmer, så de kan bruges på renere og effektive måder. Attributterne er datamedlemmer (klassevariabler og instansvariabler) og metoder, som er tilgængelige via punktnotation.



  • Klassevariabel er en variabel, der deles af alle de forskellige objekter / forekomster af en klasse.
  • Instansvariabler er variabler, der er unikke for hver forekomst. Det er defineret inde i en metode og hører kun til den aktuelle forekomst af en klasse.
  • Metoder kaldes også som funktioner, der er defineret i en klasse og beskriver et objekts opførsel.

Lad os nu gå videre og se, hvordan det fungerer i PyCharm. For at komme i gang skal du først se på syntaxen for en python-klasse.

Syntaks :

klasse Class_name: statement-1. . udsagn-N

Her er “ klasse ” erklæring opretter en ny klassedefinition. Klassens navn følger straks nøgleordet “ klasse ” i python, som efterfølges af et kolon. For at oprette en klasse i python skal du overveje nedenstående eksempel:



klassemedarbejder: pass # ingen attributter og metoder emp_1 = medarbejder () emp_2 = medarbejder () #instansvariabel kan oprettes 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)

Produktion -

aayushi@edureka.co test@company.com

indstil Java-sti i Windows

Hvad nu hvis vi ikke ønsker at indstille disse variabler manuelt. Du vil se en masse kode, og det er også udsat for fejl. Så for at gøre det automatisk kan vi bruge metoden “init”. Lad os derfor forstå, hvad der præcist er metoder og attributter i en python-klasse.

Metoder og attributter i en Python-klasse

Det er nu ufuldstændigt at oprette en klasse uden noget funktionalitet. Så funktionaliteter kan defineres ved at indstille forskellige attributter, der fungerer som en container til data og funktioner relateret til disse attributter. Funktioner i python kaldes også som Metoder . Taler om i det metode , det er en speciel funktion, som kaldes, når et nyt objekt i den klasse instantieres. Du kan tænke på det som initialiseringsmetode, eller du kan overveje dette som konstruktører, hvis du kommer fra en anden objektorienteret programmeringsbaggrund som C ++, Java osv. Nu når vi indstiller en metode inde i en klasse, modtager de automatisk forekomst. Lad os gå videre med python-klasse og acceptere fornavn, efternavn og løn ved hjælp af denne metode.

klassemedarbejder: def __init __ (selv, første, sidste, sal): self.fname = første self.lname = sidste self.sal = sal self.email = første + '.' + sidste + '@ company.com' emp_1 = medarbejder ('aayushi', 'johari', 350000) emp_2 = medarbejder ('test', 'test', 100000) print (emp_1.email) print (emp_2.email)

Nu inden for vores 'init' -metode har vi indstillet disse instansvariabler (selv, første, sidste, sal). Selv er den forekomst, der betyder, at når vi skriver self.fname = først, er det det samme som emp_1.first = 'aayushi'. Derefter har vi oprettet forekomster af medarbejderklasse, hvor vi kan overføre de værdier, der er angivet i init-metoden. Denne metode tager forekomsterne som argumenter. I stedet for at gøre det manuelt, gøres det automatisk nu.

Dernæst ønsker vi evnen til at udføre en slags handling. Til det vil vi tilføje en metode til denne klasse. Antag, at jeg ønsker, at funktionaliteten skal vise medarbejderens fulde navn. Så lad os implementere dette praktisk.

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

Produktion-

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

Som du kan se ovenfor, har jeg oprettet en metode kaldet “fuldt navn” inden for en klasse. Så hver metode i en python-klasse tager automatisk forekomsten som det første argument. Nu inden for denne metode har jeg skrevet logikken til at udskrive fuldt navn og returnere dette i stedet for emp_1 fornavn og efternavn. Dernæst har jeg brugt ”selv”, så det fungerer med alle forekomster. Derfor bruger vi en til at udskrive dette hver gang metode .

Når vi går videre med Python-klasser, er der variabler, der deles mellem alle forekomster af en klasse. Disse kaldes som klassevariabler . Forekomstvariabler kan være unikke for hver forekomst som navne, e-mail, sal osv. Kompliceret? Lad os forstå dette med et eksempel. Se koden nedenfor for at finde ud af den årlige lønstigning.

klassemedarbejder: perc_raise = 1.05 def __init __ (selv, første, sidste, sal): self.fname = første self.lname = sidste self.sal = sal self.email = første + '.' + sidste + '@ company.com' def fuldnavn (selv): returner '{} {}'. format (self.fname, self.lname) def Apply_raise (self): self.sal = int (self.sal * 1.05 ) emp_1 = medarbejder ('aayushi', 'johari', 350000) emp_2 = medarbejder ('test', 'test', 100000) print (emp_1.sal) emp_1.apply_raise () print (emp_1.sal)

Produktion-

350000 367500

Som du kan se ovenfor, har jeg først udskrevet lønnen og derefter anvendt forhøjelsen på 1,5%. For at få adgang til disse klassevariabler er vi enten nødt til at få adgang til dem gennem klassen eller en forekomst af klassen. Lad os nu forstå de forskellige attributter i en python-klasse.

Attributter i en Python-klasse

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

  • Indbyggede klasseattributter: Der er forskellige indbyggede attributter til stede i Python-klasser. For eksempel _dict_, _doc_, _name _ osv. Lad mig tage det samme eksempel, hvor jeg vil se alle nøgleværdiparene for medarbejder1. Til det kan du blot skrive nedenstående erklæring, der indeholder klassens navneområde:

    udskrive (emp_1 .__ dict__)

    Når du har udført det, får du output som: {'fname': 'aayushi', 'lname': 'johari', 'sal': 350000, 'email': 'aayushi.johari@company.com'}

  • Attributter defineret af brugere : Attributter oprettes inden for klassedefinitionen. Vi kan dynamisk oprette nye attributter til eksisterende forekomster af en klasse. Attributter kan også være bundet til klassenavne.

Dernæst har vi det offentlig, beskyttet og privat egenskaber. Lad os forstå dem detaljeret:

Navngivning Type Betyder
NavnOffentligDisse attributter kan frit bruges inden for eller uden for en klassedefinition
_navnBeskyttetBeskyttede attributter bør ikke bruges uden for klassedefinitionen, medmindre inde i en underklassedefinition
__navnPrivatDenne form for attribut er utilgængelig og usynlig. Det er hverken muligt at læse eller skrive disse attributter, undtagen inde i selve klassedefinitionen


Lad os derefter forstå den vigtigste komponent i en python-klasse, dvs. objekter.

Hvad er objekter i en Python-klasse?

Som vi har diskuteret ovenfor, kan et objekt bruges til at få adgang til forskellige attributter. Det bruges til at oprette en forekomst af klassen. En forekomst er et objekt af en klasse, der er oprettet ved kørselstid.

hvordan man kopierer et objekt i java

To giver dig et hurtigt overblik, et objekt er dybest set alt, hvad du ser omkring dig. For eksempel: En hund er et objekt i dyreklassen, jeg er et objekt i den menneskelige klasse. På samme måde kan der være forskellige objekter til den samme telefonklasse.Dette svarer meget til et funktionsopkald, som vi allerede har diskuteret. Lad os forstå dette med et eksempel:

klasse MyClass: def func (self): print ('Hello') # opret en ny MyClass ob = MyClass () ob.func ()

Fortsæt med python-klasse og lad os forstå de forskellige OOP-koncepter.

OOPs koncepter

OOP'er henviser til den objektorienterede programmering i Python. Nå, Python er ikke helt objektorienteret, da den indeholder nogle procedurefunktioner. Nu skal du undre dig over, hvad der er forskellen mellem en proceduremæssig og objektorienteret programmering. For at fjerne din tvivl i en procedureprogrammering er hele koden skrevet i en lang procedure, selvom den måske indeholder funktioner og underrutiner. Det er ikke håndterbart, da både data og logik blandes sammen. Men når vi taler om objektorienteret programmering, opdeles programmet i selvstændige objekter eller flere mini-programmer. Hvert objekt repræsenterer en anden del af applikationen, som har sine egne data og logik til at kommunikere indbyrdes. For eksempel har et websted forskellige objekter såsom billeder, videoer osv.
Objektorienteret programmering inkluderer begrebet Python-klasse, objekt, arv, polymorfisme, abstraktion osv. Lad os forstå disse emner i detaljer.

Python-klasse: arv

Arv giver os mulighed for at arve attributter og metoder fra basis- / forældreklassen. Dette er nyttigt, da vi kan oprette underklasser og få al funktionalitet fra vores overordnede klasse. Derefter kan vi overskrive og tilføje nye funktioner uden at påvirke moderklassen. Lad os forstå begrebet forældreklasse og børneklasse med et eksempel.

Som vi kan se på billedet, arver et barn egenskaberne fra faren. På samme måde er der i python to klasser:

1. Forældreklasse (Super- eller baseklasse)

2. Børneklasse (underklasse eller afledt klasse)

En klasse, der arver egenskaberne, er kendt som Barn Klasse, hvorimod en klasse, hvis egenskaber arves, kaldes Forælder klasse.

Arv refererer til evnen til at skabe Underklasser der indeholder specialiseringer fra deres forældre. Det er yderligere opdelt i fire typer, nemlig enkelt, multilevel, hierarkisk og flere arv. Se nedenstående billede for at få en bedre forståelse.

Lad os gå videre med python-klasse og forstå, hvordan arv er nyttigt.

Sig, jeg vil oprette klasser til de typer medarbejdere. Jeg opretter 'udviklere' og 'ledere' som underklasser, da både udviklere og ledere vil have et navn, e-mail og løn, og alle disse funktioner vil være der i medarbejderklassen. Så i stedet for at kopiere koden til underklasserne kan vi simpelthen genbruge koden ved at arve den medarbejder.

klassemedarbejder: num_medarbejder = 0 raise_omount = 1.04 def __init __ (self, first, last, sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + sidste + '@ company.com' medarbejder.num_medarbejder + = 1 def fuldnavn (selv): returner '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) klasseudvikler (medarbejder): pass emp_1 = developer ('aayushi', 'johari', 1000000) print (emp_1.email)
 Produktion - aayushi.johari@company.com

Som du kan se i ovenstående output, er alle detaljer om medarbejderklassen tilgængelige i udviklerklassen.Hvad nu hvis jeg vil ændre hævebeløbet for en udvikler til 10%? lad os se, hvordan det kan gøres praktisk.

klassemedarbejder: num_medarbejder = 0 raise_omount = 1.04 def __init __ (self, first, last, sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + sidste + '@ company.com' medarbejder.num_medarbejder + = 1 def fuldnavn (selv): returner '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) klasseudvikler (medarbejder): raise_amount = 1.10 emp_1 = udvikler ('aayushi', 'johari', 1000000) print (emp_1.raise_amount)
 Produktion - 1.1

Som du kan se, at den har opdateret den procentvise stigning i løn fra 4% til 10%.Hvis jeg nu vil tilføje endnu en attribut, skal du sige et programmeringssprog i vores init-metode, men det findes ikke i vores overordnede klasse. Er der nogen løsning på det? Ja! vi kan kopiere hele medarbejderlogikken og gøre det, men det vil igen øge kodestørrelsen. Så for at undgå det, lad os overveje nedenstående kode:

klassemedarbejder: num_medarbejder = 0 raise_omount = 1.04 def __init __ (self, first, last, sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + sidste + '@ company.com' medarbejder.num_medarbejder + = 1 def fuldnavn (selv): returner '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) klasseudvikler (medarbejder): 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') print (emp_1.prog_lang)

Derfor, med bare en lille smule kode, har jeg foretaget ændringer. Jeg har brugt super .__ init __ (first, last, pay), som arver egenskaberne fra basisklassen.Afslutningsvis bruges arv til at genbruge koden og reducere kompleksiteten i et program.

Python-klasse: polymorfisme

Polymorfisme inden for datalogi er evnen til at præsentere den samme grænseflade for forskellige underliggende former. I praksis betyder polymorfisme, at hvis klasse B arver fra klasse A, behøver den ikke at arve alt ved klasse A, den kan gøre nogle af de ting, som klasse A gør anderledes. Det bruges mest, når det drejer sig om arv. Python er implicit polymorf, det har evnen til at overbelaste standardoperatører, så de har passende adfærd baseret på deres sammenhæng.

Lad os 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 = Kat ('kitty') c.talk () d = Hund (Animal) d.talk ()

Output -

Meow! Woof

Lad os derefter gå til et andet objektorienteret programmeringskoncept, dvs. abstraktion.

Python-klasse: Abstraktion

Abstraktion bruges til at forenkle kompleks virkelighed ved at modellere klasser, der passer til problemet. Her har vi en abstrakt klasse, som ikke kan instantieres. Dette betyder, at du ikke kan oprette objekter eller forekomster til disse klasser. Det kan kun bruges til at arve visse funktioner, som du kalder som en basisklasse. Så du kan arve funktionaliteter, men på samme tid kan du ikke oprette en forekomst af denne klasse. Lad os forstå begrebet abstrakt klasse med et eksempel nedenfor:

fra abc import ABC, abstractmethod klasse Medarbejder (ABC): @abstractmethod def beregne_salar (selv, sal): pass klasse Udvikler (Medarbejder): def beregne_salar (selv, sal): finalalary = sal * 1.10 returnere finalalary emp_1 = Developer () print (emp_1.calculate_salary (10000))

Produktion-

11000,0

Som du kan se i ovenstående output, har vi øget grundlønnen til 10%, dvs. lønnen er nu 11000. Hvis du faktisk fortsætter og laver et objekt i klasse 'Medarbejder', kaster det dig en fejl, som python ikke tillader dig ikke at oprette et objekt af abstrakt klasse. Men ved hjælp af arv kan du faktisk arve egenskaberne og udføre de respektive opgaver.

Så fyre, dette handlede kun om pythonklasser og genstande i en nøddeskal. Vi har dækket alt det grundlæggende i Python-klassen, objekter og forskellige objektorienterede koncepter i python, så du kan begynde at øve dig nu. Jeg håber, at I nød at læse denne blog på 'Python Class' og er klare over hvert eneste aspekt, som jeg har diskuteret ovenfor. Efter python-klassen kommer jeg med flere blogs på Python til scikit-læringsbibliotek og array. Bliv hængende!

Har du et spørgsmål til os? Nævn det i kommentarfeltet på denne 'Python Class' -blog, og vi vender tilbage til dig hurtigst muligt.

For at få indgående kendskab til Python sammen med dens forskellige applikationer kan du med vores live online-træning med support døgnet rundt og livstidsadgang.

hvad er en hashset java