Classes i objectes de Python: programació orientada a objectes



Aquest bloc sobre 'Classe Python' tracta els fonaments de la classe, l'atribut i diversos conceptes OOPS com l'herència, el polimorfisme i l'encapsulació.

Després que Stack Overflow predigués que el 2019, Python superarà altres idiomes en termes de desenvolupadors actius, la demanda de només creix.Python segueix el paradigma de programació orientat a objectes. Tracta de declarar classes de python, crear objectes a partir d’elles i interactuar amb els usuaris. En un llenguatge orientat a objectes, el programa es divideix en objectes autònoms o es pot dir en diversos mini-programes. Cada objecte representa una part diferent de l'aplicació que es pot comunicar entre ells.
En aquest bloc de classes de Python, entendreu cada aspecte de les classes i dels objectes en la següent seqüència:

Comencem.:-)





Què és una classe Python?

Una classe en python és el pla a partir del qual es creen objectes específics. Us permet estructurar el programari d’una manera particular. Aquí ve una pregunta com? Les classes ens permeten agrupar lògicament les nostres dades i funcionar de manera que sigui fàcil de reutilitzar i de construir sobre si cal. Penseu en la imatge següent.

ClassesAndObjects - Classe Python - EdurekaA la primera imatge (A), representa un pla d’una casa que es pot considerar com Classe . Amb el mateix pla, podem crear diverses cases i aquestes es poden considerar com Objectes . Mitjançant una classe, podeu afegir coherència als vostres programes perquè es puguin utilitzar de maneres més netes i eficients. Els atributs són membres de dades (variables de classe i variables d’instància) i mètodes als quals s’accedeix mitjançant la notació de punts.



  • Variable de classe és una variable que comparteixen tots els diferents objectes / instàncies d'una classe.
  • Variables d’instància són variables exclusives de cada instància. Es defineix dins d’un mètode i pertany només a la instància actual d’una classe.
  • Mètodes també s'anomenen funcions que es defineixen en una classe i descriuen el comportament d'un objecte.

Ara, anem a seguir endavant i veiem com funciona a PyCharm. Per començar, primer feu un cop d'ull a la sintaxi d'una classe de python.

Sintaxi :

classe Class_name: statement-1. . declaració-N

Aquí, classe ” sentència crea una nova definició de classe. El nom de la classe segueix immediatament la paraula clau ' classe ” en pitó que va seguit de dos punts. Per crear una classe en python, tingueu en compte l'exemple següent:



empleat de classe: passa #no atributs i mètodes emp_1 = empleat () emp_2 = empleat () #instance variable es pot crear manualment emp_1.first = 'aayushi' emp_1.last = 'Johari' emp_1.email='aayushi@edureka.co 'emp_1.pay = 10000 emp_2.first =' prova 'emp_2.last =' abc 'emp_2.email='test@company.com' emp_2.pay = 10000 imprimir (emp_1.email) imprimir (emp_2.email)

Sortida -

aayushi@edureka.co test@company.com

Ara, què passa si no volem configurar aquestes variables manualment. Veureu molts codis i també és propens a errors. Per fer-ho automàtic, podem utilitzar el mètode 'init'. Per a això, entenem què són exactament els mètodes i atributs d’una classe de python.

Mètodes i atributs en una classe Python

Ara la creació d’una classe és incompleta sense algunes funcionalitats. Per tant, les funcionalitats es poden definir establint diversos atributs que actuen com a contenidor de dades i funcions relacionades amb aquests atributs. Les funcions en python també s’anomenen Mètodes . Parlant del init mètode , és una funció especial que es crida sempre que s'instancia un nou objecte d'aquesta classe. Podeu considerar-lo com un mètode d’inicialització o podeu considerar-ho com a constructors si proveniu d’un altre fons de programació orientat a objectes, com ara C ++, Java, etc. Ara, quan establim un mètode dins d’una classe, reben la instància automàticament. Anem endavant amb la classe python i acceptem el nom, cognoms i salari amb aquest mètode.

empleat de la classe: def __init __ (self, first, last, sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.' + last + '@ company.com' emp_1 = empleat ('aayushi', 'johari', 350000) emp_2 = empleat ('test', 'test', 100000) imprimir (emp_1.email) imprimir (emp_2.email)

Ara dins del nostre mètode 'init', hem establert aquestes variables d'instància (self, first, last, sal). Self és la instància que significa que sempre que escrivim self.fname = primer, és el mateix que emp_1.first = 'aayushi'. A continuació, hem creat instàncies de classe d'empleats on podem passar els valors especificats al mètode init. Aquest mètode pren les instàncies com a arguments. En lloc de fer-ho manualment, es farà automàticament ara.

A continuació, volem la possibilitat de realitzar algun tipus d'acció. Per a això, afegirem un mètode a aquesta classe. Suposem que vull que la funcionalitat mostri el nom complet de l’empleat. Per tant, implementem-ho pràcticament.

empleat de la classe: 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 = empleat ('aayushi', 'johari', 350000) emp_2 = empleat ('prova', 'prova', 100000) imprimir (emp_1.email) imprimir (emp_2.email) imprimir (emp_1.fullname ()) imprimir (emp_2.fullname ())

Sortida-

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

Com podeu veure més amunt, he creat un mètode anomenat 'nom complet' dins d'una classe. Per tant, cada mètode dins d’una classe python pren automàticament la instància com a primer argument. Ara dins d’aquest mètode, he escrit la lògica per imprimir el nom complet i tornar-lo en lloc del nom i el cognom emp_1. A continuació, he utilitzat 'jo' perquè funcioni amb totes les instàncies. Per tant, per imprimir-ho cada vegada, fem servir un fitxer mètode .

com utilitzar logger a Java

Avançant amb les classes de Python, hi ha variables que es comparteixen entre totes les instàncies d’una classe. Es diuen com variables de classe . Les variables d’instància poden ser úniques per a cada instància, com ara noms, correu electrònic, sal, etc. Anem a entendre-ho amb un exemple. Consulteu el codi següent per esbrinar la pujada anual del salari.

empleat de la classe: 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): return '{} {}'. format (self.fname, self.lname) def apply_raise (self): self.sal = int (self.sal * 1.05 ) emp_1 = empleat ('aayushi', 'johari', 350000) emp_2 = empleat ('test', 'test', 100000) imprimir (emp_1.sal) emp_1.apply_raise () imprimir (emp_1.sal)

Sortida-

350000 367500

Com podeu veure més amunt, primer he imprès el salari i després he aplicat l’augment de l’1,5%. Per accedir a aquestes variables de classe, cal accedir-hi mitjançant la classe o una instància de la classe. Ara, entenem els diversos atributs d’una classe de python.

Atributs en una classe Python

Els atributs de Python defineixen una propietat d’un objecte, element o fitxer. Hi ha dos tipus d’atributs:

  • Atributs de classe incorporats: Hi ha diversos atributs integrats presents a les classes de Python. Per exemple, _dict_, _doc_, _name _, etc. Permeteu-me prendre el mateix exemple en què vull veure tots els parells clau-valor d'empleat1. Per a això, només podeu escriure la sentència següent que conté l’espai de noms de la classe:

    imprimir (emp_1 .__ dict__)

    Després d’executar-lo, obtindreu resultats com ara: {‘fname’: ‘aayushi’, ‘lname’: ‘johari’, ‘sal’: 350000, ‘email’: ‘aayushi.johari@company.com’}

  • Atributs definits pels usuaris : Els atributs es creen dins de la definició de classe. Podem crear dinàmicament nous atributs per a instàncies existents d’una classe. Els atributs també es poden vincular als noms de les classes.

A continuació, ho tenim públic, protegit i privat atributs. Entenguem-los en detall:

Denominació Tipus Significat
NomPúblicAquests atributs es poden utilitzar lliurement dins o fora d’una definició de classe
_nomProtegitEls atributs protegits no s’han d’utilitzar fora de la definició de classe, tret que es trobin dins d’una definició de subclasse
__nomPrivatAquest tipus d’atribut és inaccessible i invisible. No és possible llegir ni escriure aquests atributs, excepte dins de la definició de classe mateixa


A continuació, comprenem el component més important d’una classe de python, és a dir, objectes.

com establir classpath a Windows 10

Què són els objectes d'una classe Python?

Com hem comentat anteriorment, es pot utilitzar un objecte per accedir a diferents atributs. S'utilitza per crear una instància de la classe. Una instància és un objecte d'una classe creada en temps d'execució.

To us oferim una visió general ràpida, bàsicament un objecte és tot el que veieu al voltant. Per exemple: un gos és un objecte de la classe animal, jo sóc un objecte de la classe humana. De la mateixa manera, hi pot haver diferents objectes per a la mateixa classe de telèfon.Això és bastant similar a una trucada de funció que ja hem comentat. Anem a entendre-ho amb un exemple:

classe MyClass: def func (self): print ('Hola') # crear una nova MyClass ob = MyClass () ob.func ()

Seguint endavant amb la classe Python, comprenguem els diversos conceptes de POO.

Conceptes de POO

OOP fa referència a la programació orientada a objectes a Python. Bé, Python no està completament orientat a objectes, ja que conté algunes funcions procedimentals. Ara, us heu de preguntar quina és la diferència entre una programació procedimental i orientada a objectes. Per esborrar el vostre dubte, en una programació procedimental, tot el codi s’escriu en un procediment llarg tot i que pugui contenir funcions i subrutines. No és manejable, ja que les dades i la lògica es combinen. Però quan parlem de programació orientada a objectes, el programa es divideix en objectes autònoms o diversos mini-programes. Cada objecte representa una part diferent de l'aplicació que té les seves pròpies dades i lògica per comunicar-se entre ells. Per exemple, un lloc web té diferents objectes, com ara imatges, vídeos, etc.
La programació orientada a objectes inclou el concepte de classe Python, objecte, herència, polimorfisme, abstracció, etc. Comprenguem aquests temes en detall.

Classe Python: Herència

L’herència ens permet heretar atributs i mètodes de la classe base / pare. Això és útil ja que podem crear subclases i obtenir tota la funcionalitat de la nostra classe pare. Després podem sobreescriure i afegir noves funcionalitats sense afectar la classe pare. Entenem el concepte de classe dels pares i classe infantil amb un exemple.

Com podem veure a la imatge, un fill hereta les propietats del pare. De manera similar, a Python, hi ha dues classes:

1. Classe principal (classe Super o Base)

2. Classe infantil (subclasse o classe derivada)

Una classe que hereta les propietats es coneix com Nen Class mentre que una classe les propietats de les quals s'hereten es coneix com Pares classe.

L’herència es refereix a la capacitat de crear Subclases que contenen especialitzacions dels seus pares. A més, es divideix en quatre tipus: herències simples, multinivell, jeràrquiques i múltiples. Consulteu la imatge següent per obtenir una millor comprensió.

Continuem amb la classe python i entenem com és útil l’herència.

Per exemple, vull crear classes per als tipus d’empleats. Crearé 'desenvolupadors' i 'gestors' com a subclases, ja que tant els desenvolupadors com els gestors tindran un nom, un correu electrònic i un salari, i totes aquestes funcionalitats hi seran a la classe dels empleats. Per tant, en lloc de copiar el codi de les subclasses, podem simplement reutilitzar el codi heretant de l’empleat.

empleat de la classe: 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): return '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) desenvolupador de la classe (empleat): pass emp_1 = desenvolupador ('aayushi', 'johari', 1000000) imprimir (emp_1.email)
 Sortida - aayushi.johari@company.com

Com podeu veure a la sortida anterior, tots els detalls de la classe d'empleats estan disponibles a la classe de desenvolupadors.Ara, què passa si vull canviar el raise_amount per a un desenvolupador al 10%? vegem com es pot fer pràcticament.

funció de potència a Java per a enters
empleat de la classe: 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): return '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) desenvolupador de la classe (empleat): raise_amount = 1,10 emp_1 = desenvolupador ('aayushi', 'johari', 1000000) imprimir (emp_1.raise_amount)
 Sortida - 1.1

Com podeu veure, ha actualitzat l’augment percentual del salari del 4% al 10%.Ara, si vull afegir un atribut més, digueu un llenguatge de programació al nostre mètode init, però no existeix a la nostra classe principal. Hi ha alguna solució per això? Sí! podem copiar tota la lògica dels empleats i fer-ho, però tornarà a augmentar la mida del codi. Per evitar-ho, considerem el següent codi:

empleat de la classe: 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): return '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) desenvolupador de la classe (empleat): 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') imprimir (emp_1.prog_lang)

Per tant, amb només una mica de codi, he fet canvis. He utilitzat super .__ init __ (primer, darrer, pagar) que hereta les propietats de la classe base.Per concloure, l’herència s’utilitza per reutilitzar el codi i reduir la complexitat d’un programa.

Classe Python: polimorfisme

El polimorfisme en informàtica és la capacitat de presentar la mateixa interfície per a diferents formes subjacents. En termes pràctics, el polimorfisme significa que si la classe B hereta de la classe A, no ha d’heretar tot sobre la classe A, pot fer algunes de les coses que fa la classe A de manera diferent. S’utilitza més habitualment quan es tracta d’herències. Python és implícitament polimorf, té la capacitat de sobrecarregar els operadors estàndard perquè tinguin un comportament adequat en funció del seu context.

Entenguem-ho amb un exemple:

classe Animal: def __init __ (self, name): self.name = nom def talk (auto): passar classe Dog (Animal): def talk (auto): imprimir ('Woof') classe Cat (Animal): def talk ( self): print ('MEOW!') c = Cat ('gatet') c.talk () d = Dog (Animal) d.talk ()

Sortida -

Meu! Woof

A continuació, passem a un altre concepte de programació orientat a objectes, és a dir, Abstracció.

Classe Python: Abstracció

L’abstracció s’utilitza per simplificar la realitat complexa modelant classes adequades al problema. Aquí tenim una classe abstracta que no es pot instanciar. Això significa que no podeu crear objectes ni instàncies per a aquestes classes. Només es pot utilitzar per heretar determinades funcionalitats a les quals anomeneu com a classe base. De manera que podeu heretar funcionalitats, però al mateix temps no podeu crear cap instància d’aquesta classe en particular. Entenem el concepte de classe abstracta amb un exemple a continuació:

de la importació ABC, classe abstractmethod Empleat (ABC): @abstractmethod def calculate_salary (self, sal): passar classe Developer (Employee): def calculate_salary (self, sal): finalsalary = sal * 1,10 return finalsalary emp_1 = Developer () print (emp_1.calculate_salary (10000))

Sortida-

11000.0

Com podeu veure a la sortida anterior, hem augmentat el salari base al 10%, és a dir, ara el salari és de 11000. Ara, si realment continueu fent un objecte de la classe 'Empleat', us generarà un error com no fa Python No us permetrà crear un objecte de classe abstracta. Però mitjançant l'herència, podeu heretar les propietats i realitzar les tasques respectives.

Doncs nois, tot es tractava de classes i objectes de pitó en poques paraules. Hem cobert tots els conceptes bàsics de la classe Python, objectes i diversos conceptes orientats a objectes a Python, de manera que podeu començar a practicar ara. Espero que us hagi agradat llegir aquest bloc a 'Python Class' i tingueu clar tots els aspectes que he comentat anteriorment. Després de la classe de python, aniré amb més blocs a Python per a la biblioteca i la matriu de scikit learn. Estigueu atents!

Tens alguna pregunta? Si us plau, mencioneu-lo a la secció de comentaris d’aquest bloc “Classe Python” i us respondrem el més aviat possible.

Per obtenir un coneixement en profunditat de Python juntament amb les seves diverses aplicacions, podeu fer-ho amb la nostra formació en línia en directe amb assistència les 24 hores del dia, els 7 dies de la setmana i accés permanent.