Clase și obiecte Python - Programare orientată pe obiecte



Acest blog despre „Clasa Python” tratează elementele fundamentale ale clasei, atributelor și diferitelor concepte OOPS, cum ar fi moștenirea, polimorfismul și încapsularea.

După ce Stack Overflow a prezis că până în 2019, Python va depăși alte limbi în ceea ce privește dezvoltatorii activi, cererea pentru este doar în creștere.Python urmează paradigma de programare orientată obiect. Se ocupă cu declararea claselor python, crearea de obiecte din acestea și interacțiunea cu utilizatorii. Într-un limbaj orientat obiect, programul este împărțit în obiecte autonome sau puteți spune în mai multe mini-programe. Fiecare obiect reprezintă o parte diferită a aplicației care poate comunica între ele.
În acest blog de clasă Python, veți înțelege fiecare aspect al claselor și obiectelor în următoarea succesiune:

Să începem.:-)





Ce este o clasă Python?

O clasă în python este planul din care sunt create obiecte specifice. Vă permite să vă structurați software-ul într-un mod special. Iată o întrebare cum? Clasele ne permit să grupăm în mod logic datele și să funcționăm într-un mod care să fie ușor de reutilizat și într-o modalitate de a construi, dacă este necesar. Luați în considerare imaginea de mai jos.

ClassesAndObjects - Clasa Python - EdurekaÎn prima imagine (A), reprezintă un plan al unei case care poate fi considerat ca fiind Clasă . Cu același plan, putem crea mai multe case și acestea pot fi considerate ca fiind Obiecte . Folosind o clasă, puteți adăuga consistență programelor dvs., astfel încât acestea să poată fi utilizate în moduri mai curate și eficiente. Atributele sunt membri de date (variabile de clasă și variabile de instanță) și metode care sunt accesate prin notație punct.



  • Variabilă de clasă este o variabilă care este partajată de toate diferitele obiecte / instanțe ale unei clase.
  • Variabile de instanta sunt variabile unice pentru fiecare instanță. Este definit în interiorul unei metode și aparține doar instanței curente a unei clase.
  • Metode sunt numite și ca funcții care sunt definite într-o clasă și descriu comportamentul unui obiect.

Acum, să mergem mai departe și să vedem cum funcționează în PyCharm. Pentru a începe, aruncați mai întâi o privire la sintaxa unei clase python.

Sintaxă :

clasă Nume_clasă: declarație-1. . enunț-N

Aici ' clasă' declarația creează o nouă definiție a clasei. Numele clasei urmează imediat cuvântul cheie „ clasă' în piton care este urmat de un colon. Pentru a crea o clasă în python, luați în considerare exemplul de mai jos:



angajat de clasă: treceți # niciun atribut și metodă emp_1 = angajat () emp_2 = angajat () #instanta variabilă poate fi creată manual 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)

Ieșire -

aayushi@edureka.co test@company.com

Acum, dacă nu dorim să setăm manual aceste variabile. Veți vedea o mulțime de cod și, de asemenea, este predispus la erori. Deci, pentru ao face automat, putem folosi metoda „init”. Pentru aceasta, să înțelegem ce anume sunt metodele și atributele dintr-o clasă python.

Metode și atribute într-o clasă Python

Acum, crearea unei clase este incompletă, fără anumite funcționalități. Deci, funcționalitățile pot fi definite prin setarea diferitelor atribute care acționează ca un container pentru date și funcții legate de aceste atribute. Funcțiile din python sunt, de asemenea, numite ca Metode . Vorbind despre init metodă , este o funcție specială care este apelată ori de câte ori este instanțiat un nou obiect din acea clasă. Puteți să o considerați ca o metodă de inițializare sau o puteți considera ca fiind constructori dacă proveniți din orice alt fundal de programare orientat pe obiecte, cum ar fi C ++, Java etc. Să mergem mai departe cu clasa python și să acceptăm prenumele, prenumele și salariul folosind această metodă.

angajat de clasă: def __init __ (self, first, last, sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.' + last + '@ company.com' emp_1 = angajat ('aayushi', 'johari', 350000) emp_2 = angajat ('test', 'test', 100000) print (emp_1.email) print (emp_2.email)

Acum, în cadrul metodei noastre „init”, am setat aceste variabile de instanță (auto, prima, ultima, sal). Sinele este instanța care înseamnă ori de câte ori scriem self.fname = first, este la fel ca emp_1.first = 'aayushi'. Apoi am creat instanțe ale clasei de angajați în care putem transmite valorile specificate în metoda init. Această metodă ia instanțele ca argumente. În loc să o faceți manual, se va face automat acum.

Apoi, dorim abilitatea de a efectua un fel de acțiune. Pentru aceasta, vom adăuga un metodă la această clasă. Să presupunem că vreau ca funcționalitatea să afișeze numele complet al angajatului. Deci, haideți să implementăm acest lucru practic.

angajat de clasă: 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) emp_1 = angajat ('aayushi', 'johari', 350000) emp_2 = angajat ('test', 'test', 100000) print (emp_1.email) print (emp_2.email) print (emp_1.fullname ()) print (emp_2.fullname ())

Ieșire-

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

După cum puteți vedea mai sus, am creat o metodă numită „nume complet” în cadrul unei clase. Deci, fiecare metodă dintr-o clasă python ia automat instanța ca primul argument. Acum, în cadrul acestei metode, am scris logica pentru a imprima numele complet și a returna acest lucru în loc de numele și prenumele emp_1. Apoi, am folosit „sinele”, astfel încât să funcționeze cu toate cazurile. Prin urmare, pentru a imprima acest lucru de fiecare dată, folosim un metodă .

secvența Fibonacci în c ++

Continuând cu clasele Python, există variabile care sunt partajate între toate instanțele unei clase. Acestea sunt numite ca variabile de clasă . Variabilele de instanță pot fi unice pentru fiecare instanță, cum ar fi nume, e-mail, sal etc. Complicate? Să înțelegem acest lucru cu un exemplu. Consultați codul de mai jos pentru a afla creșterea anuală a salariului.

angajat de clasă: 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): returnează '{} {}'. format (self.fname, self.lname) def apply_raise (self): self.sal = int (self.sal * 1.05 ) emp_1 = angajat ('aayushi', 'johari', 350000) emp_2 = angajat ('test', 'test', 100000) print (emp_1.sal) emp_1.apply_raise () print (emp_1.sal)

Ieșire-

350000 367500

După cum puteți vedea mai sus, am tipărit mai întâi salariul și apoi am aplicat creșterea de 1,5%. Pentru a accesa aceste variabile de clasă, fie trebuie să le accesăm prin intermediul clasei, fie printr-o instanță a clasei. Acum, să înțelegem diferitele atribute dintr-o clasă python.

Atribute într-o clasă Python

Atributele din Python definesc o proprietate a unui obiect, element sau fișier. Există două tipuri de atribute:

  • Atribute de clasă încorporate: Există diferite atribute încorporate prezente în clasele Python. De exemplu, _dict_, _doc_, _name _, etc. Permiteți-mi să iau același exemplu în care vreau să vizualizez toate perechile cheie-valoare ale angajatului1. Pentru aceasta, puteți scrie pur și simplu declarația de mai jos care conține spațiul de nume al clasei:

    print (emp_1 .__ dict__)

    După executarea acestuia, veți obține rezultate precum: {‘fname’: ‘aayushi’, ‘lname’: ‘johari’, ‘sal’: 350000, ‘email’: ‘aayushi.johari@company.com’}

  • Atribute definite de utilizatori : Atributele sunt create în interiorul definiției clasei. Putem crea dinamic atribute noi pentru instanțele existente ale unei clase. Atributele pot fi legate și de numele claselor.

Apoi, avem public, protejat și privat atribute. Să le înțelegem în detaliu:

Denumire Tip Sens
NumePublicAceste atribute pot fi utilizate în mod liber în interiorul sau în afara unei definiții de clasă
_NumeProtejatAtributele protejate nu trebuie utilizate în afara definiției clasei, cu excepția cazului în care se află într-o definiție a subclasei
__NumePrivatAcest tip de atribut este inaccesibil și invizibil. Nu este posibil să citiți sau să scrieți aceste atribute, cu excepția definiției clasei în sine


În continuare, să înțelegem cea mai importantă componentă dintr-o clasă python, adică obiecte.

cum se instalează hadoop în Linux

Ce sunt obiectele dintr-o clasă Python?

După cum am discutat mai sus, un obiect poate fi utilizat pentru a accesa diferite atribute. Este folosit pentru a crea o instanță a clasei. O instanță este un obiect al unei clase create în timpul rulării.

To vă oferă o imagine de ansamblu rapidă, un obiect este practic tot ce vedeți în jur. De exemplu: Un câine este un obiect al clasei de animale, eu sunt un obiect al clasei umane. În mod similar, pot exista obiecte diferite pentru aceeași clasă de telefon.Acest lucru este destul de similar cu un apel de funcție pe care l-am discutat deja. Să înțelegem acest lucru cu un exemplu:

class MyClass: def func (self): print ('Hello') # create a new MyClass ob = MyClass () ob.func ()

Continuând cu clasa python, să înțelegem diferitele concepte OOP.

Conceptele OOPs

OOP se referă la programarea orientată pe obiecte în Python. Ei bine, Python nu este complet orientat pe obiecte, deoarece conține unele funcții procedurale. Acum, trebuie să vă întrebați care este diferența dintre o programare procedurală și orientată obiect. Pentru a vă șterge îndoiala, într-o programare procedurală, întregul cod este scris într-o singură procedură lungă, chiar dacă ar putea conține funcții și subrutine. Nu este gestionabil, deoarece atât datele cât și logica se amestecă. Dar când vorbim despre programarea orientată pe obiecte, programul este împărțit în obiecte independente sau mai multe mini-programe. Fiecare obiect reprezintă o parte diferită a aplicației care are propriile date și logică pentru a comunica între ei. De exemplu, un site web are diferite obiecte, cum ar fi imagini, videoclipuri etc.
Programarea orientată pe obiecte include conceptul de clasă Python, obiect, moștenire, polimorfism, abstractizare etc. Să înțelegem aceste subiecte în detaliu.

Clasa Python: Moștenire

Moștenirea ne permite să moștenim atribute și metode din clasa de bază / părinte. Acest lucru este util deoarece putem crea sub-clase și putem obține toate funcționalitățile din clasa noastră părinte. Apoi putem suprascrie și adăuga noi funcționalități fără a afecta clasa părinte. Să înțelegem conceptul de clasă părinte și clasă copil cu un exemplu.

După cum putem vedea în imagine, un copil moștenește proprietățile de la tată. În mod similar, în Python, există două clase:

1. Clasa părinte (clasa Super sau Base)

2. Clasa pentru copii (subclasă sau clasă derivată)

O clasă care moștenește proprietățile este cunoscută sub numele de Copil Clasa întrucât o clasă ale cărei proprietăți sunt moștenite este cunoscută sub numele de Mamă clasă.

Moștenirea se referă la capacitatea de a crea Subclasele care conțin specializări ale părinților lor. Mai departe este împărțit în patru tipuri și anume moșteniri unice, multinivel, ierarhice și multiple. Consultați imaginea de mai jos pentru a înțelege mai bine.

Să mergem mai departe cu clasa python și să înțelegem cum este utilă moștenirea.

Spuneți, vreau să creez clase pentru tipurile de angajați. Voi crea „dezvoltatori” și „manageri” ca sub-clase, deoarece atât dezvoltatorii, cât și managerii vor avea un nume, e-mail și salariu și toate aceste funcționalități vor fi acolo în clasa angajaților. Deci, în loc de a copia codul pentru subclasele, putem pur și simplu reutiliza codul prin moștenirea de la angajat.

angajat de clasă: num_employee = 0 raise_amount = 1,04 def __init __ (self, first, last, sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + last + '@ company.com' employee.num_employee + = 1 def fullname (self): returnează '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) clasă dezvoltator (angajat): pass emp_1 = dezvoltator ('aayushi', 'johari', 1000000) print (emp_1.email)
 Ieșire - aayushi.johari@company.com

După cum puteți vedea în rezultatul de mai sus, toate detaliile clasei angajaților sunt disponibile în clasa dezvoltator.Ce se întâmplă acum dacă vreau să schimb raise_amount pentru un dezvoltator la 10%? să vedem cum se poate face practic.

conversie tip în c ++
angajat de clasă: num_employee = 0 raise_amount = 1,04 def __init __ (self, first, last, sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + last + '@ company.com' employee.num_employee + = 1 def fullname (self): returnează '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) clasă dezvoltator (angajat): raise_amount = 1,10 emp_1 = dezvoltator ('aayushi', 'johari', 1000000) print (emp_1.raise_amount)
 Ieșire - 1.1

După cum puteți vedea, a actualizat creșterea procentuală a salariului de la 4% la 10%.Acum, dacă vreau să adaug încă un atribut, spuneți un limbaj de programare în metoda noastră inițială, dar nu există în clasa noastră părinte. Există vreo soluție pentru asta? Da! putem copia întreaga logică a angajaților și putem face asta, dar va crește din nou dimensiunea codului. Deci, pentru a evita acest lucru, să luăm în considerare codul de mai jos:

angajat de clasă: num_employee = 0 raise_amount = 1,04 def __init __ (self, first, last, sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + last + '@ company.com' employee.num_employee + = 1 def fullname (self): returnează '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) dezvoltator de clasă (angajat): 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)

Prin urmare, cu doar un pic de cod, am făcut modificări. Am folosit super .__ init __ (primul, ultimul, plătiți) care moștenește proprietățile din clasa de bază.În concluzie, moștenirea este utilizată pentru a reutiliza codul și a reduce complexitatea unui program.

Clasa Python: Polimorfism

Polimorfismul în informatică este capacitatea de a prezenta aceeași interfață pentru diferite forme subiacente. În termeni practici, polimorfismul înseamnă că, dacă clasa B moștenește din clasa A, nu trebuie să moștenească totul despre clasa A, poate face unele dintre lucrurile pe care clasa A le face diferit. Este cel mai frecvent utilizat atunci când se ocupă de moștenire. Python este implicit polimorf, are capacitatea de a supraîncărca operatorii standard, astfel încât aceștia să aibă un comportament adecvat pe baza contextului lor.

Să înțelegem cu un exemplu:

clasa Animal: def __init __ (self, name): self.name = nume def talk (self): trece clasa Dog (Animal): def talk (self): print ('Woof') clasa Cat (Animal): def talk ( self): print ('MEOW!') c = Cat ('kitty') c.talk () d = Dog (Animal) d.talk ()

Ieșire -

Miau! Bătătură

În continuare, să trecem la un alt concept de programare orientat pe obiecte, adică Abstracție.

Clasa Python: Abstracție

Abstracția este utilizată pentru a simplifica realitatea complexă prin modelarea claselor adecvate problemei. Aici avem o clasă abstractă care nu poate fi instanțiată. Aceasta înseamnă că nu puteți crea obiecte sau instanțe pentru aceste clase. Poate fi folosit doar pentru moștenirea anumitor funcționalități pe care le numiți ca clasă de bază. Deci, puteți moșteni funcționalități, dar, în același timp, nu puteți crea o instanță a acestei clase particulare. Să înțelegem conceptul de clasă abstractă cu un exemplu mai jos:

din abc import ABC, clasa abstractmethod Angajat (ABC): @abstractmethod def calculate_salary (self, sal): promovează clasa Developer (Angajat): def calculate_salary (self, sal): finalsalary = sal * 1.10 return finalalary emp_1 = Developer () print (emp_1.calculate_salary (10000))

Ieșire-

11000,0

După cum puteți vedea în rezultatul de mai sus, am crescut salariul de bază la 10%, adică salariul este acum de 11000. Acum, dacă continuați și faceți un obiect din clasa „Angajat”, vă aruncă o eroare așa cum nu face Python Nu vă permite să creați un obiect de clasă abstractă. Dar folosind moștenirea, puteți moșteni proprietățile și îndeplini sarcinile respective.

Deci, băieți, totul a fost despre clase de python și obiecte pe scurt. Am acoperit toate elementele de bază ale clasei Python, obiectele și diferite concepte orientate obiect în Python, astfel încât să puteți începe să practicați acum. Sper că ați plăcut să citiți acest blog pe „Clasa Python” și să fiți clari cu privire la fiecare aspect pe care l-am discutat mai sus. După cursul python, voi veni cu mai multe bloguri pe Python pentru biblioteca și matricea scikit learn. Rămâneți aproape!

Ai o întrebare pentru noi? Vă rugăm să o menționați în secțiunea de comentarii a acestui blog „Clasa Python” și vă vom răspunde cât mai curând posibil.

Pentru a obține cunoștințe aprofundate despre Python împreună cu diferitele sale aplicații, puteți cu instruirea noastră online live cu asistență 24/7 și acces pe viață.