Python-klasser och objekt - Objektorienterad programmering

Den här bloggen på 'Python Class' behandlar de grundläggande faktorerna för klass, attribut och olika OOPS-koncept som arv, polymorfism och inkapsling.

Efter att Stack Overflow förutspådde att 2019 kommer Python att överträffa andra språk när det gäller aktiva utvecklare, efterfrågan på växer bara.Python följer objektorienterad programmering paradigm. Det handlar om att deklarera pythonklasser, skapa objekt från dem och interagera med användarna. På ett objektorienterat språk är programmet uppdelat i fristående objekt eller så kan du säga till flera miniprogram. Varje objekt representerar en annan del av applikationen som kan kommunicera med varandra.
I denna python-klassblogg kommer du att förstå varje aspekt av klasser och objekt i följande sekvens:



Låt oss börja.:-)



Vad är en Python-klass?

En klass i python är ritningen från vilken specifika objekt skapas. Det låter dig strukturera din programvara på ett visst sätt. Här kommer en fråga hur? Klasser tillåter oss att logiskt gruppera våra data och fungera på ett sätt som det är lätt att återanvända och ett sätt att bygga på om det behövs. Tänk på bilden nedan.

ClassesAndObjects - Python-klass - EdurekaI den första bilden (A) representerar den en ritning av ett hus som kan betraktas som Klass . Med samma ritning kan vi skapa flera hus och dessa kan betraktas som Objekt . Med hjälp av en klass kan du lägga till konsistens i dina program så att de kan användas på renare och effektivare sätt. Attributen är datamedlemmar (klassvariabler och instansvariabler) och metoder som nås via punktnotering.



  • Klassvariabel är en variabel som delas av alla olika objekt / instanser i en klass.
  • Instansvariabler är variabler som är unika för varje instans. Det definieras i en metod och tillhör endast den aktuella instansen av en klass.
  • Metoder kallas också som funktioner som definieras i en klass och beskriver ett objekts beteende.

Låt oss nu gå vidare och se hur det fungerar i PyCharm. För att komma igång, ta en titt på syntaxen för en pythonklass.

Syntax :

klass Klassnamn: uttalande-1. . uttalande-N

Här, “ klass' uttalande skapar en ny klassdefinition. Klassens namn följer omedelbart nyckelordet ” klass' i python som följs av ett kolon. För att skapa en klass i python, överväg exemplet nedan:



klassanställd: pass # inga attribut och metoder emp_1 = anställd () emp_2 = anställd () #instansvariabel kan skapas manuellt 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

Tänk nu om vi inte vill ställa in dessa variabler manuellt. Du kommer att se mycket kod och det är också benäget för fel. Så för att göra det automatiskt kan vi använda 'init' -metoden. För det, låt oss förstå vad exakt är metoder och attribut i en pythonklass.

Metoder och attribut i en Python-klass

Att skapa en klass är nu ofullständigt utan någon funktionalitet. Så funktionaliteter kan definieras genom att ställa in olika attribut som fungerar som en behållare för data och funktioner relaterade till dessa attribut. Funktioner i python kallas också som Metoder . Pratar om i det metod , det är en speciell funktion som kallas närhelst ett nytt objekt i den klassen instanseras. Du kan tänka på det som initialiseringsmetod eller så kan du betrakta detta som konstruktörer om du kommer från någon annan objektorienterad programmeringsbakgrund som C ++, Java etc. Nu när vi ställer in en metod i en klass, får de instansen automatiskt. Låt oss gå vidare med pythonklassen och acceptera förnamn, efternamn och lön med den här metoden.

klassanställd: def __init __ (self, first, last, sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.' + sista + '@ company.com' emp_1 = anställd ('aayushi', 'johari', 350000) emp_2 = anställd ('test', 'test', 100000) skriv ut (emp_1.email) skriv ut (emp_2.email)

Nu inom vår 'init' -metod har vi ställt in dessa instansvariabler (själv, första, sista, sal). Själv är den instans som betyder när vi skriver self.fname = först, det är samma som emp_1.first = 'aayushi'. Sedan har vi skapat förekomster av medarbetarklass där vi kan skicka de värden som anges i initmetoden. Denna metod tar förekomsten som argument. Istället för att göra det manuellt kommer det att göras automatiskt nu.

Därefter vill vi ha förmågan att utföra någon form av åtgärder. För det kommer vi att lägga till en metod till den här klassen. Antag att jag vill att funktionaliteten ska visa hela anställdas namn. Så låt oss implementera detta praktiskt.

klassanställd: def __init __ (self, first, last, sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.' + sista + '@ company.com' def fullname (self): return '{} {}'. format (self.fname, self.lname) emp_1 = medarbetare ('aayushi', 'johari', 350000) emp_2 = anställd ('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 ovan har jag skapat en metod som heter 'fullständigt namn' inom en klass. Så varje metod i en pythonklass tar automatiskt instansen som det första argumentet. Nu inom den här metoden har jag skrivit logiken för att skriva ut fullständigt namn och returnera det istället för emp_1 förnamn och efternamn. Därefter har jag använt ”jag” så att det fungerar med alla instanser. För att skriva ut detta varje gång använder vi en metod .

hur man avslutar Java-programmet

När vi går vidare med Python-klasser finns det variabler som delas mellan alla förekomster av en klass. Dessa kallas som klassvariabler . Instansvariabler kan vara unika för varje instans som namn, e-post, sal etc. Komplicerat? Låt oss förstå detta med ett exempel. Se koden nedan för att ta reda på den årliga höjningen av lönen.

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

Produktion-

350000 367500

Som du kan se ovan har jag skrivit ut lönen först och sedan tillämpat 1,5% -ökningen. För att komma åt dessa klassvariabler måste vi antingen komma åt dem genom klassen eller en instans av klassen. Låt oss nu förstå de olika attributen i en pythonklass.

Attribut i en Python-klass

Attribut i Python definierar en egenskap för ett objekt, element eller en fil. Det finns två typer av attribut:

  • Inbyggda klassattribut: Det finns olika inbyggda attribut i Python-klasser. Till exempel _dict_, _doc_, _name _, etc. Låt mig ta samma exempel där jag vill se alla nyckel-värdepar för anställd1. För det kan du helt enkelt skriva nedanstående uttalande som innehåller klassnamnsområdet:

    skriva ut (emp_1 .__ dict__)

    Efter att ha kört det kommer du att få utdata som: {‘fname’: ‘aayushi’, ‘lname’: ‘johari’, ‘sal’: 350000, ‘email’: ‘aayushi.johari@company.com '}

  • Attribut definierade av användare : Attribut skapas i klassdefinitionen. Vi kan dynamiskt skapa nya attribut för befintliga instanser av en klass. Attribut kan också bindas till klassnamn.

Nästa har vi allmän, skyddad och privat attribut. Låt oss förstå dem i detalj:

Namngivning Typ Menande
namnoffentligDessa attribut kan användas fritt inom eller utanför en klassdefinition
_namnSkyddadeSkyddade attribut ska inte användas utanför klassdefinitionen, såvida inte inuti en underklassdefinition
__namnPrivatDenna typ av attribut är otillgänglig och osynlig. Det är varken möjligt att läsa eller skriva dessa attribut, utom i själva klassdefinitionen


Låt oss sedan förstå den viktigaste komponenten i en pythonklass, dvs. objekt.

Vad är objekt i en Python-klass?

Som vi har diskuterat ovan kan ett objekt användas för att komma åt olika attribut. Den används för att skapa en instans av klassen. En instans är ett objekt av en klass som skapas vid körning.

To ge dig en snabb översikt, ett objekt är i princip allt du ser runt. Till exempel: En hund är ett objekt i djurklassen, jag är ett objekt i den mänskliga klassen. På samma sätt kan det finnas olika objekt i samma telefonklass.Detta liknar ganska mycket ett funktionsanrop som vi redan har diskuterat. Låt oss förstå detta med ett exempel:

klass MyClass: def func (själv): skriv ut ('Hello') # skapa ett nytt MyClass ob = MyClass () ob.func ()

Låt oss förstå de olika OOP-koncepten när vi går vidare med pythonklassen.

OOPs begrepp

OOP: er hänvisar till den objektorienterade programmeringen i Python. Tja, Python är inte helt objektorienterad eftersom den innehåller vissa procedurfunktioner. Nu måste du undra vad som är skillnaden mellan en procedurell och objektorienterad programmering. För att rensa ditt tvivel, i en procedurprogrammering, är hela koden skriven i en lång procedur även om den kan innehålla funktioner och underrutiner. Det är inte hanterbart eftersom både data och logik blandas ihop. Men när vi pratar om objektorienterad programmering delas programmet i fristående objekt eller flera miniprogram. Varje objekt representerar en annan del av applikationen som har sin egen data och logik att kommunicera med varandra. Till exempel har en webbplats olika objekt som bilder, videor etc.
Objektorienterad programmering inkluderar begreppet Python-klass, objekt, arv, polymorfism, abstraktion etc. Låt oss förstå dessa ämnen i detalj.

Python-klass: arv

Arv tillåter oss att ärva attribut och metoder från bas- / föräldraklassen. Det här är användbart eftersom vi kan skapa underklasser och få all funktionalitet från vår överordnade klass. Då kan vi skriva över och lägga till nya funktioner utan att påverka föräldraklassen. Låt oss förstå begreppet föräldraklass och barnklass med ett exempel.

Som vi kan se på bilden ärver ett barn egenskaperna från fadern. På samma sätt finns det i python två klasser:

1. Föräldraklass (Super- eller basklass)

2. Barnklass (underklass eller härledd klass)

En klass som ärver egenskaperna kallas Barn Klass medan en klass vars egenskaper ärvs är känd som Förälder klass.

Arv hänvisar till förmågan att skapa Underklasser som innehåller specialiseringar från sina föräldrar. Den är vidare uppdelad i fyra typer, nämligen enstaka, flernivå, hierarkiska och flera arv. Se bilden nedan för att få en bättre förståelse.

decimal till binär i python

Låt oss gå vidare med pythonklass och förstå hur arv är användbart.

Säg, jag vill skapa klasser för de anställda. Jag skapar 'utvecklare' och 'chefer' som underklasser eftersom både utvecklare och chefer kommer att ha ett namn, e-post och lön och alla dessa funktioner kommer att finnas där i arbetarklassen. Så istället för att kopiera koden för underklasserna kan vi helt enkelt återanvända koden genom att ärva från den anställde.

klassanställd: num_medarbetare = 0 höja_belopp = 1,04 def __init __ (själv, första, sista, sal): self.first = första self.last = sista self.sal = sal self.email = första + '.' + sista + '@ company.com' medarbetare.num_medarbetare + = 1 def fullnamn (själv): returnera '{} {}'. format (self.first, self.last) def applic_raise (self): self.sal = int ( self.sal * raise_amount) klassutvecklare (anställd): pass emp_1 = utvecklare ('aayushi', 'johari', 1000000) skriv ut (emp_1.email)
 Produktion - aayushi.johari@company.com

Som du kan se i ovanstående utdata finns all information om medarbetarklassen tillgänglig i utvecklarklassen.Tänk nu om jag vill ändra höjningsbeloppet för en utvecklare till 10%? låt oss se hur det kan göras praktiskt.

klassanställd: num_medarbetare = 0 höja_belopp = 1,04 def __init __ (själv, första, sista, sal): self.first = första self.last = sista self.sal = sal self.email = första + '.' + sista + '@ company.com' medarbetare.num_medarbetare + = 1 def fullnamn (själv): returnera '{} {}'. format (self.first, self.last) def applic_raise (self): self.sal = int ( self.sal * raise_amount) klassutvecklare (anställd): raise_amount = 1.10 emp_1 = utvecklare ('aayushi', 'johari', 1000000) skriv ut (emp_1.raise_amount)
 Produktion - 1.1

Som du kan se har den uppdaterat den procentuella löneökningen från 4% till 10%.Om jag nu vill lägga till ytterligare ett attribut, säg ett programmeringsspråk i vår init-metod, men det finns inte i vår föräldraklass. Finns det någon lösning för det? ja! vi kan kopiera hela anställdens logik och göra det men det kommer igen att öka kodstorleken. Så för att undvika det, låt oss överväga koden nedan:

klassanställd: num_medarbetare = 0 höja_belopp = 1,04 def __init __ (själv, första, sista, sal): self.first = första self.last = sista self.sal = sal self.email = första + '.' + sista + '@ company.com' medarbetare.num_medarbetare + = 1 def fullnamn (själv): returnera '{} {}'. format (self.first, self.last) def applic_raise (self): self.sal = int ( self.sal * raise_amount) klassutvecklare (medarbetare): 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') tryck (emp_1.prog_lang)

Därför, med bara lite kod, har jag gjort ändringar. Jag har använt super .__ init __ (first, last, pay) som ärver egenskaperna från basklassen.Avslutningsvis används arv för att återanvända koden och minska komplexiteten i ett program.

Python-klass: polymorfism

Polymorfism inom datavetenskap är förmågan att presentera samma gränssnitt för olika underliggande former. I praktiken betyder polymorfism att om klass B ärver från klass A, behöver den inte ärva allt om klass A, den kan göra några av de saker som klass A gör annorlunda. Det används oftast när man hanterar arv. Python är implicit polymorf, det har förmågan att överbelasta standardoperatörer så att de har lämpligt beteende baserat på sitt sammanhang.

Låt oss förstå med ett exempel:

klass 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 ( själv): tryck ut ('MEOW!') c = Cat ('kitty') c.talk () d = Dog (Animal) d.talk ()

Utgång -

Mjau! Väft

Låt oss sedan gå till ett annat objektorienterat programmeringskoncept, dvs. abstraktion.

Python-klass: Abstraktion

Abstraktion används för att förenkla komplex verklighet genom att modellera klasser som är lämpliga för problemet. Här har vi en abstrakt klass som inte kan instantieras. Det betyder att du inte kan skapa objekt eller instanser för dessa klasser. Den kan bara användas för att ärva vissa funktioner som du kallar som basklass. Så du kan ärva funktioner men samtidigt kan du inte skapa en instans av just den här klassen. Låt oss förstå begreppet abstrakt klass med ett exempel nedan:

från abc import ABC, abstrakt metodklass Anställd (ABC): @abstraktmetod def beräknar_lön (själv, sal): pass klass Utvecklare (Anställd): def beräknar_lön (själv, sal): finalalary = sal * 1,10 retur finalalary emp_1 = Developer () print (emp_1.calculate_salary (10000))

Produktion-

11000,0

Som du kan se i ovanstående produktion har vi höjt grundlönen till 10%, dvs lönen är nu 11000. Om du faktiskt fortsätter och gör ett objekt av klassen 'Anställd', ger det dig ett fel som python inte Du kan inte skapa ett objekt av abstrakt klass. Men med hjälp av arv kan du faktiskt ärva egenskaperna och utföra respektive uppgifter.

Så killar, det här handlade om pythonklasser och föremål i ett nötskal. Vi har täckt alla grunderna i Python-klassen, objekt och olika objektorienterade koncept i python, så att du kan börja träna nu. Jag hoppas att ni tyckte om att läsa den här bloggen på 'Python Class' och är tydliga om varje aspekt som jag har diskuterat ovan. Efter pythonklassen kommer jag att komma med fler bloggar på Python för scikit lär bibliotek och array. Håll dig uppdaterad!

jenkins vs marionett vs kock

Har du en fråga till oss? Vänligen nämna det i kommentarsektionen i denna “Python Class” -blogg så återkommer vi till dig så snart som möjligt.

För att få fördjupad kunskap om Python tillsammans med dess olika applikationer kan du med vår live-utbildning online med support dygnet runt och livstidsåtkomst.