Classi e oggetti Python - Programmazione orientata agli oggetti



Questo blog sulla 'Classe Python' tratta i fondamenti di classe, attributo e vari concetti OOPS come ereditarietà, polimorfismo e incapsulamento.

Dopo che Stack Overflow aveva previsto che entro il 2019, Python supererà gli altri linguaggi in termini di sviluppatori attivi, la domanda di sta solo crescendo.Python segue il paradigma di programmazione orientato agli oggetti. Si occupa di dichiarare classi Python, creare oggetti da esse e interagire con gli utenti. In un linguaggio orientato agli oggetti, il programma è suddiviso in oggetti autonomi o si può dire in diversi mini-programmi. Ogni oggetto rappresenta una parte diversa dell'applicazione che può comunicare tra di loro.
In questo blog di classe Python, capirai ogni aspetto delle classi e degli oggetti nella seguente sequenza:

Iniziamo.:-)





Cos'è una classe Python?

Una classe in Python è il progetto da cui vengono creati oggetti specifici. Ti consente di strutturare il tuo software in un modo particolare. Ecco una domanda come? Le classi ci consentono di raggruppare logicamente i nostri dati e le nostre funzioni in un modo che sia facile da riutilizzare e un modo su cui costruire se necessario. Considera l'immagine sotto.

ClassesAndObjects - Classe Python - EdurekaNella prima immagine (A), rappresenta un progetto di una casa che può essere considerato come Classe . Con lo stesso progetto, possiamo creare diverse case e queste possono essere considerate come Oggetti . Utilizzando una classe, puoi aggiungere coerenza ai tuoi programmi in modo che possano essere utilizzati in modi più puliti ed efficienti. Gli attributi sono membri di dati (variabili di classe e variabili di istanza) e metodi a cui si accede tramite notazione a punti.



  • Variabile di classe è una variabile condivisa da tutti i diversi oggetti / istanze di una classe.
  • Variabili di istanza sono variabili uniche per ogni istanza. È definito all'interno di un metodo e appartiene solo all'istanza corrente di una classe.
  • Metodi sono anche chiamate come funzioni definite in una classe e descrivono il comportamento di un oggetto.

Ora andiamo avanti e vediamo come funziona in PyCharm. Per iniziare, dai un'occhiata alla sintassi di una classe python.

Sintassi :

class Class_name: istruzione-1. . dichiarazione-N

Qui, il ' classe' istruzione crea una nuova definizione di classe. Il nome della classe segue immediatamente la parola chiave ' classe' in python che è seguito da due punti. Per creare una classe in Python, considera l'esempio seguente:



classe dipendente: passare #no attributi e metodi emp_1 = dipendente () emp_2 = dipendente () # variabile istanza può essere creata manualmente 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)

Produzione -

aayushi@edureka.co test@company.com

Ora, cosa succede se non vogliamo impostare manualmente queste variabili. Vedrai molto codice ed è anche soggetto a errori. Quindi, per renderlo automatico, possiamo usare il metodo 'init'. Per questo, vediamo cosa sono esattamente i metodi e gli attributi in una classe Python.

Metodi e attributi in una classe Python

Ora la creazione di una classe è incompleta senza alcune funzionalità. Quindi le funzionalità possono essere definite impostando vari attributi che fungono da contenitore per i dati e le funzioni relative a tali attributi. Le funzioni in python sono anche chiamate come Metodi . Parlando del dentro metodo , è una funzione speciale che viene chiamata ogni volta che viene istanziato un nuovo oggetto di quella classe. Puoi pensarlo come un metodo di inizializzazione o puoi considerarlo come un costruttore se provieni da un altro background di programmazione orientata agli oggetti come C ++, Java ecc. Ora, quando impostiamo un metodo all'interno di una classe, ricevono l'istanza automaticamente. Andiamo avanti con la classe python e accettiamo il nome, il cognome e lo stipendio utilizzando questo metodo.

impiegato di classe: def __init __ (self, first, last, sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.' + last + '@ company.com' emp_1 = dipendente ('aayushi', 'johari', 350000) emp_2 = dipendente ('test', 'test', 100000) print (emp_1.email) print (emp_2.email)

Ora nel nostro metodo 'init', abbiamo impostato queste variabili di istanza (self, first, last, sal). Self è l'istanza che significa che ogni volta che scriviamo self.fname = first, è uguale a emp_1.first = 'aayushi'. Quindi abbiamo creato istanze della classe dipendente in cui possiamo passare i valori specificati nel metodo init. Questo metodo accetta le istanze come argomenti. Invece di farlo manualmente, sarà fatto automaticamente adesso.

come utilizzare il browser db per sqlite

Successivamente, vogliamo la capacità di eseguire un qualche tipo di azione. Per questo, aggiungeremo un file metodo a questa classe. Supponiamo che io voglia che la funzionalità visualizzi il nome completo del dipendente. Quindi implementiamolo praticamente.

impiegato di 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 = dipendente ('aayushi', 'johari', 350000) emp_2 = dipendente ('test', 'test', 100000) print (emp_1.email) print (emp_2.email) print (emp_1.fullname ()) print (emp_2.fullname ())

Produzione-

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

Come puoi vedere sopra, ho creato un metodo chiamato 'nome completo' all'interno di una classe. Quindi ogni metodo all'interno di una classe python accetta automaticamente l'istanza come primo argomento. Ora, all'interno di questo metodo, ho scritto la logica per stampare il nome completo e restituirlo invece di emp_1 nome e cognome. Successivamente, ho usato 'self' in modo che funzioni con tutte le istanze. Pertanto, per stamparlo ogni volta, utilizziamo un file metodo .

Andando avanti con le classi Python, ci sono variabili che sono condivise tra tutte le istanze di una classe. Questi sono chiamati come variabili di classe . Le variabili di istanza possono essere univoche per ogni istanza come nomi, email, sal ecc. Complicato? Capiamo questo con un esempio. Fare riferimento al codice sottostante per conoscere l'aumento annuo dello stipendio.

impiegato di 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 = dipendente ('aayushi', 'johari', 350000) emp_2 = dipendente ('test', 'test', 100000) print (emp_1.sal) emp_1.apply_raise () print (emp_1.sal)

Produzione-

350000 367500

Come puoi vedere sopra, ho stampato prima lo stipendio e poi ho applicato l'aumento dell'1,5%. Per accedere a queste variabili di classe, dobbiamo accedervi tramite la classe o un'istanza della classe. Ora, vediamo i vari attributi in una classe Python.

Attributi in una classe Python

Gli attributi in Python definiscono una proprietà di un oggetto, elemento o file. Esistono due tipi di attributi:

  • Attributi di classe incorporati: Ci sono vari attributi incorporati presenti nelle classi Python. Ad esempio _dict_, _doc_, _name _, ecc. Consentitemi di prendere lo stesso esempio in cui desidero visualizzare tutte le coppie chiave-valore di dipendente1. Per questo, puoi semplicemente scrivere la seguente dichiarazione che contiene lo spazio dei nomi della classe:

    stampa (emp_1 .__ dict__)

    Dopo averlo eseguito, otterrai un output del tipo: {'fname': 'aayushi', 'lname': 'johari', 'sal': 350000, 'email': 'aayushi.johari@company.com'}

  • Attributi definiti dagli utenti : Gli attributi vengono creati all'interno della definizione della classe. Possiamo creare dinamicamente nuovi attributi per istanze esistenti di una classe. Gli attributi possono essere associati anche ai nomi delle classi.

Poi abbiamo pubblico, protetto e privato attributi. Vediamoli in dettaglio:

Denominazione genere Senso
NomePubblicoQuesti attributi possono essere utilizzati liberamente all'interno o all'esterno di una definizione di classe
_nomeProtettoGli attributi protetti non devono essere utilizzati al di fuori della definizione di classe, a meno che non si trovi all'interno di una definizione di sottoclasse
__nomePrivatoQuesto tipo di attributo è inaccessibile e invisibile. Non è possibile né leggere né scrivere quegli attributi, tranne che all'interno della definizione della classe stessa


Successivamente, vediamo il componente più importante in una classe python, ovvero Oggetti.

Cosa sono gli oggetti in una classe Python?

Come abbiamo discusso in precedenza, un oggetto può essere utilizzato per accedere a diversi attributi. Viene utilizzato per creare un'istanza della classe. Un'istanza è un oggetto di una classe creata in fase di esecuzione.

TPer darti una rapida panoramica, un oggetto è fondamentalmente tutto ciò che vedi intorno. Ad esempio: un cane è un oggetto della classe animale, io sono un oggetto della classe umana. Allo stesso modo, possono esserci diversi oggetti nella stessa classe di telefoni.Questo è abbastanza simile a una chiamata di funzione di cui abbiamo già discusso. Capiamo questo con un esempio:

class MyClass: def func (self): print ('Hello') # crea una nuova MyClass ob = MyClass () ob.func ()

Andando avanti con la classe Python, vediamo di comprendere i vari concetti di OOP.

Concetti di OOPs

OOP si riferisce alla programmazione orientata agli oggetti in Python. Bene, Python non è completamente orientato agli oggetti in quanto contiene alcune funzioni procedurali. Ora, ti starai chiedendo qual è la differenza tra una programmazione procedurale e orientata agli oggetti. Per chiarire il tuo dubbio, in una programmazione procedurale, l'intero codice viene scritto in una lunga procedura anche se potrebbe contenere funzioni e subroutine. Non è gestibile poiché sia ​​i dati che la logica vengono mescolati insieme. Ma quando parliamo di programmazione orientata agli oggetti, il programma è suddiviso in oggetti autonomi o diversi mini-programmi. Ogni oggetto rappresenta una parte diversa dell'applicazione che ha i propri dati e la propria logica per comunicare tra di loro. Ad esempio, un sito Web ha diversi oggetti come immagini, video ecc.
La programmazione orientata agli oggetti include il concetto di classe Python, oggetto, ereditarietà, polimorfismo, astrazione ecc. Comprendiamo questi argomenti in dettaglio.

Classe Python: ereditarietà

L'ereditarietà ci consente di ereditare attributi e metodi dalla classe base / genitore. Questo è utile in quanto possiamo creare sottoclassi e ottenere tutte le funzionalità dalla nostra classe genitore. Quindi possiamo sovrascrivere e aggiungere nuove funzionalità senza influire sulla classe genitore. Comprendiamo il concetto di classe genitore e classe figlia con un esempio.

Come possiamo vedere nell'immagine, un bambino eredita le proprietà dal padre. Allo stesso modo, in Python, ci sono due classi:

1. Classe genitore (classe Super o Base)

2. Classe figlio (sottoclasse o classe derivata)

funzione power in java per interi

Una classe che eredita le proprietà è nota come Bambino Class mentre una classe le cui proprietà vengono ereditate è nota come Genitore classe.

L'ereditarietà si riferisce alla capacità di creare Sottoclassi che contengono specializzazioni dei loro genitori. È ulteriormente suddiviso in quattro tipi: eredità singola, multilivello, gerarchica e multipla. Fare riferimento all'immagine sottostante per ottenere una migliore comprensione.

Andiamo avanti con la classe Python e capiamo quanto sia utile l'ereditarietà.

Diciamo, voglio creare classi per i tipi di dipendenti. Creerò 'sviluppatori' e 'manager' come sottoclassi poiché sia ​​gli sviluppatori che i manager avranno un nome, un indirizzo email e uno stipendio e tutte queste funzionalità saranno presenti nella classe dei dipendenti. Quindi, invece di copiare il codice per le sottoclassi, possiamo semplicemente riutilizzare il codice ereditandolo dal dipendente.

impiegato di 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' dipendente.num_employee + = 1 def fullname (self): return '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) sviluppatore della classe (dipendente): pass emp_1 = sviluppatore ('aayushi', 'johari', 1000000) print (emp_1.email)
 Produzione - aayushi.johari@company.com

Come puoi vedere nell'output sopra, tutti i dettagli della classe dipendente sono disponibili nella classe sviluppatore.E se volessi modificare il raise_amount per uno sviluppatore al 10%? vediamo come si può fare praticamente.

impiegato di 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' dipendente.num_employee + = 1 def fullname (self): return '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) sviluppatore di classi (dipendente): raise_amount = 1.10 emp_1 = developer ('aayushi', 'johari', 1000000) print (emp_1.raise_amount)
 Produzione - 1.1

Come puoi vedere ha aggiornato la percentuale di aumento dello stipendio dal 4% al 10%.Ora, se voglio aggiungere un altro attributo, diciamo un linguaggio di programmazione nel nostro metodo init, ma non esiste nella nostra classe genitore. C'è qualche soluzione per questo? Sì! possiamo copiare l'intera logica del dipendente e farlo, ma aumenterà nuovamente la dimensione del codice. Quindi, per evitare ciò, consideriamo il codice seguente:

impiegato di 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' dipendente.num_employee + = 1 def fullname (self): return '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) sviluppatore di classi (dipendente): 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)

Pertanto, con solo un po 'di codice, ho apportato modifiche. Ho usato super .__ init __ (first, last, pay) che eredita le proprietà dalla classe base.Per concludere, l'ereditarietà viene utilizzata per riutilizzare il codice e ridurre la complessità di un programma.

Classe Python: polimorfismo

Il polimorfismo in Informatica è la capacità di presentare la stessa interfaccia per differenti forme sottostanti. In termini pratici, il polimorfismo significa che se la classe B eredita dalla classe A, non deve ereditare tutto della classe A, può fare alcune delle cose che la classe A fa in modo diverso. È più comunemente usato quando si tratta di eredità. Python è implicitamente polimorfico, ha la capacità di sovraccaricare gli operatori standard in modo che abbiano un comportamento appropriato in base al loro contesto.

Facci capire con un esempio:

class 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 ( self): print ('MEOW!') c = Cat ('kitty') c.talk () d = Dog (Animal) d.talk ()

Produzione -

Miao! Trama

python __init__ classe

Successivamente, passiamo a un altro concetto di programmazione orientata agli oggetti, ovvero Astrazione.

Classe Python: astrazione

L'astrazione viene utilizzata per semplificare la realtà complessa modellando classi appropriate al problema. Qui abbiamo una classe astratta che non può essere istanziata. Ciò significa che non è possibile creare oggetti o istanze per queste classi. Può essere utilizzato solo per ereditare determinate funzionalità che chiamate come classe base. Quindi puoi ereditare le funzionalità ma, allo stesso tempo, non puoi creare un'istanza di questa particolare classe. Comprendiamo il concetto di classe astratta con un esempio di seguito:

from abc import ABC, abstractmethod class Employee (ABC): @abstractmethod def calcola_salario (self, sal): passa classe Sviluppatore (dipendente): def calcola_salario (self, sal): finalsalary = sal * 1.10 return finalsalary emp_1 = Sviluppatore () stampa (emp_1.calculate_salary (10000))

Produzione-

11000.0

Come puoi vedere nell'output sopra, abbiamo aumentato lo stipendio base al 10%, ovvero lo stipendio ora è 11000. Ora, se in realtà vai avanti e crei un oggetto di classe 'Employee', ti lancia un errore come non fa Python non ti permettono di creare un oggetto di classe astratta. Ma usando l'ereditarietà, puoi effettivamente ereditare le proprietà ed eseguire le rispettive attività.

Quindi ragazzi, in poche parole si trattava di classi e oggetti Python. Abbiamo coperto tutte le basi della classe Python, degli oggetti e di vari concetti orientati agli oggetti in Python, quindi puoi iniziare a esercitarti ora. Spero che vi siate divertiti a leggere questo blog su 'Python Class' e che siate chiari su ogni aspetto di cui ho discusso sopra. Dopo la lezione di python, verranno in mente altri blog su Python per scikit, libreria e array di apprendimento. Rimanete sintonizzati!

Hai domande per noi? Per favore, menzionalo nella sezione commenti di questo blog 'Python Class' e ti risponderemo il prima possibile.

Per ottenere una conoscenza approfondita di Python e delle sue varie applicazioni, puoi farlo con la nostra formazione online dal vivo con supporto 24 ore su 24, 7 giorni su 7 e accesso a vita.