logo

Concetti di Python OOP

La programmazione orientata agli oggetti è un concetto fondamentale in Python, poiché consente agli sviluppatori di creare applicazioni modulari, manutenibili e scalabili. Comprendendo i principi fondamentali dell'OOP (classi, oggetti, ereditarietà, incapsulamento, polimorfismo e astrazione), i programmatori possono sfruttare tutto il potenziale delle funzionalità OOP di Python per progettare soluzioni eleganti ed efficienti a problemi complessi.

Cos'è la programmazione orientata agli oggetti in Python?

In Python la programmazione orientata agli oggetti (OOP) è un paradigma di programmazione che utilizza oggetti e classi nella programmazione. Mira a implementare entità del mondo reale come ereditarietà, polimorfismi, incapsulamento, ecc. nella programmazione. Il concetto principale della programmazione orientata agli oggetti (OOP) o concetti oops in Python è quello di unire i dati e le funzioni che lavorano insieme come una singola unità in modo che nessun'altra parte del codice possa accedere a questi dati.



Concetti OOP in Python

  • Classe in Python
  • Oggetti in Python
  • Polimorfismo in Python
  • Incapsulamento in Python
  • Ereditarietà in Python
  • Astrazione dei dati in Python
OOP di Python

Concetti di Python OOP

metodo tostring java

Classe Python

Una classe è una raccolta di oggetti. Una classe contiene i progetti o il prototipo da cui vengono creati gli oggetti. È un'entità logica che contiene alcuni attributi e metodi.

Per comprendere la necessità di creare una classe consideriamo un esempio, supponiamo che tu voglia tenere traccia del numero di cani che possono avere attributi diversi come razza ed età. Se viene utilizzata una lista, il primo elemento potrebbe essere la razza del cane mentre il secondo elemento potrebbe rappresentarne l’età. Supponiamo che ci siano 100 cani diversi, quindi come faresti a sapere quale elemento dovrebbe essere quale? E se volessi aggiungere altre proprietà a questi cani? Ciò manca di organizzazione ed è esattamente l’esigenza delle lezioni.



Alcuni punti sulla classe Python:

  • Le classi vengono create dalla classe parola chiave.
  • Gli attributi sono le variabili che appartengono ad una classe.
  • Gli attributi sono sempre pubblici ed è possibile accedervi utilizzando l'operatore punto (.). Es.: Miaclasse.Mioattributo

Sintassi della definizione di classe:

class ClassName: # Statement-1 . . . # Statement-N>

Creazione di una classe vuota in Python

Nell'esempio precedente, abbiamo creato una classe denominata Dog utilizzando la parola chiave class.



Pitone
# Python3 program to # demonstrate defining # a class class Dog: pass>

Oggetti Python

Nella programmazione orientata agli oggetti Python, l'oggetto è un'entità a cui è associato uno stato e un comportamento. Può essere qualsiasi oggetto del mondo reale come un mouse, una tastiera, una sedia, un tavolo, una penna, ecc. Interi, stringhe, numeri a virgola mobile, persino matrici e dizionari, sono tutti oggetti. Più specificamente, ogni singolo numero intero o ogni singola stringa è un oggetto. Il numero 12 è un oggetto, la stringa Ciao, mondo è un oggetto, una lista è un oggetto che può contenere altri oggetti e così via. Hai sempre usato oggetti e potresti anche non rendertene conto.

Un oggetto è costituito da:

  • Stato: È rappresentato dagli attributi di un oggetto. Riflette anche le proprietà di un oggetto.
  • Comportamento: È rappresentato dai metodi di un oggetto. Riflette anche la risposta di un oggetto ad altri oggetti.
  • Identità: Dà un nome univoco a un oggetto e consente a un oggetto di interagire con altri oggetti.

Per comprendere lo stato, il comportamento e l'identità prendiamo l'esempio della classe cane (spiegato sopra).

  • L'identità può essere considerata come il nome del cane.
  • Lo stato o gli attributi possono essere considerati come la razza, l'età o il colore del cane.
  • Il comportamento può essere considerato in base al fatto che il cane stia mangiando o dormendo.

Creare un oggetto

Questo creerà un oggetto chiamato obj della classe Dog definita sopra. Prima di approfondire gli oggetti e le classi, è necessario comprendere alcune parole chiave di base che verranno utilizzate durante il lavoro con oggetti e classi.

Python3
obj = Dog()>

Il sé Python

  1. I metodi di classe devono avere un primo parametro aggiuntivo nella definizione del metodo. Non diamo un valore per questo parametro quando chiamiamo il metodo, lo fornisce Python
  2. Se abbiamo un metodo che non accetta argomenti, allora dobbiamo avere ancora un argomento.
  3. Questo è simile a questo puntatore in C++ e a questo riferimento in Java.

Quando chiamiamo un metodo di questo oggetto come myobject.method(arg1, arg2), questo viene automaticamente convertito da Python in MyClass.method(myobject, arg1, arg2) - questo è tutto ciò che riguarda il sé speciale.

Nota: Per ulteriori informazioni, fare riferimento a self nella classe Python

Il metodo __init__ di Python

IL metodo __init__ è simile ai costruttori in C++ e Java. Viene eseguito non appena viene istanziato un oggetto di una classe. Il metodo è utile per eseguire qualsiasi inizializzazione che desideri eseguire con il tuo oggetto. Ora definiamo una classe e creiamo alcuni oggetti utilizzando il metodo self e __init__.

Creazione di una classe e di un oggetto con attributi di classe e istanza

Python3
class Dog: # class attribute attr1 = 'mammal' # Instance attribute def __init__(self, name): self.name = name # Driver code # Object instantiation Rodger = Dog('Rodger') Tommy = Dog('Tommy') # Accessing class attributes print('Rodger is a {}'.format(Rodger.__class__.attr1)) print('Tommy is also a {}'.format(Tommy.__class__.attr1)) # Accessing instance attributes print('My name is {}'.format(Rodger.name)) print('My name is {}'.format(Tommy.name))>

Produzione
Rodger is a mammal Tommy is also a mammal My name is Rodger My name is Tommy>

Creazione di classi e oggetti con metodi

Qui, la classe The Dog è definita con due attributi:

  • attr1 è un attributo di classe impostato sul valore mammifero . Gli attributi della classe sono condivisi da tutte le istanze della classe.
  • __init__ è un metodo speciale (costruttore) che inizializza un'istanza della classe Dog. Richiede due parametri: self (riferito all'istanza che si sta creando) e name (che rappresenta il nome del cane). Il parametro name viene utilizzato per assegnare un attributo name a ciascuna istanza di Dog.
    Il metodo speak è definito all'interno della classe Dog. Questo metodo stampa una stringa che include il nome dell'istanza del cane.

Il codice del driver inizia creando due istanze della classe Dog: Rodger e Tommy. Il metodo __init__ viene chiamato per ciascuna istanza per inizializzare gli attributi del nome con i nomi forniti. In entrambi i casi viene chiamato il metodo speak (Rodger.speak() e Tommy.speak()), facendo sì che ogni cane stampi un'istruzione con il suo nome.

Python3
class Dog: # class attribute attr1 = 'mammal' # Instance attribute def __init__(self, name): self.name = name def speak(self): print('My name is {}'.format(self.name)) # Driver code # Object instantiation Rodger = Dog('Rodger') Tommy = Dog('Tommy') # Accessing class methods Rodger.speak() Tommy.speak()>

Produzione
My name is Rodger My name is Tommy>

Nota: Per ulteriori informazioni, fare riferimento a Classi e oggetti Python

Java per la pausa

Eredità di Python

Nella programmazione orientata agli oggetti Python, l'ereditarietà è la capacità di una classe di derivare o ereditare le proprietà da un'altra classe. La classe che deriva le proprietà è chiamata classe derivata o classe figlia e la classe da cui derivano le proprietà è chiamata classe base o classe genitore. I vantaggi dell’eredità sono:

  • Rappresenta bene le relazioni del mondo reale.
  • Fornisce la riusabilità di un codice. Non dobbiamo scrivere lo stesso codice ancora e ancora. Inoltre, ci consente di aggiungere più funzionalità a una classe senza modificarla.
  • È di natura transitiva, il che significa che se la classe B eredita da un'altra classe A, allora tutte le sottoclassi di B erediteranno automaticamente dalla classe A.

Tipi di eredità

  • Eredità unica : L'ereditarietà a livello singolo consente a una classe derivata di ereditare caratteristiche da una classe a genitore singolo.
  • Eredità multilivello: L'ereditarietà multilivello consente a una classe derivata di ereditare proprietà da una classe genitore immediata che a sua volta eredita proprietà dalla sua classe genitore.
  • Eredità gerarchica: L'ereditarietà a livello gerarchico consente a più di una classe derivata di ereditare proprietà da una classe genitore.
  • Eredità multipla: L'ereditarietà a più livelli consente a una classe derivata di ereditare proprietà da più di una classe base.

Ereditarietà in Python

Nell'articolo sopra, abbiamo creato due classi, ovvero Person (classe genitore) e Employee (classe figlio). La classe Employee eredita dalla classe Person. Possiamo utilizzare i metodi della classe persona attraverso la classe impiegato come visto nella funzione di visualizzazione nel codice sopra. Una classe figlia può anche modificare il comportamento della classe genitore come visto attraverso il metodo Details().

Python3
# Python code to demonstrate how parent constructors # are called. # parent class class Person(object): # __init__ is known as the constructor def __init__(self, name, idnumber): self.name = name self.idnumber = idnumber def display(self): print(self.name) print(self.idnumber) def details(self): print('My name is {}'.format(self.name)) print('IdNumber: {}'.format(self.idnumber)) # child class class Employee(Person): def __init__(self, name, idnumber, salary, post): self.salary = salary self.post = post # invoking the __init__ of the parent class Person.__init__(self, name, idnumber) def details(self): print('My name is {}'.format(self.name)) print('IdNumber: {}'.format(self.idnumber)) print('Post: {}'.format(self.post)) # creation of an object variable or an instance a = Employee('Rahul', 886012, 200000, 'Intern') # calling a function of the class Person using # its instance a.display() a.details()>

Produzione
Rahul 886012 My name is Rahul IdNumber: 886012 Post: Intern>

Nota: Per maggiori informazioni consultare la ns Ereditarietà in Python tutorial.

Polimorfismo di Python

Nella programmazione Python orientata agli oggetti, polimorfismo significa semplicemente avere molte forme. Ad esempio, dobbiamo determinare se una determinata specie di uccelli vola o meno, utilizzando il polimorfismo possiamo farlo utilizzando un'unica funzione.

d infradito

Polimorfismo in Python

Questo codice dimostra il concetto di ereditarietà oops di Python e di override del metodo nelle classi Python. Mostra come le sottoclassi possono sovrascrivere i metodi definiti nella classe genitore per fornire un comportamento specifico pur ereditando altri metodi dalla classe genitore.

Python3
class Bird: def intro(self): print('There are many types of birds.') def flight(self): print('Most of the birds can fly but some cannot.') class sparrow(Bird): def flight(self): print('Sparrows can fly.') class ostrich(Bird): def flight(self): print('Ostriches cannot fly.') obj_bird = Bird() obj_spr = sparrow() obj_ost = ostrich() obj_bird.intro() obj_bird.flight() obj_spr.intro() obj_spr.flight() obj_ost.intro() obj_ost.flight()>

Produzione
There are many types of birds. Most of the birds can fly but some cannot. There are many types of birds. Sparrows can fly. There are many types of birds. Ostriches cannot fly.>

Nota: Per maggiori informazioni consultare la ns Polimorfismo in Python Esercitazione.

Incapsulamento Python

Nella programmazione orientata agli oggetti Python, l'incapsulamento è uno dei concetti fondamentali nella programmazione orientata agli oggetti (OOP). Descrive l'idea di racchiudere i dati e i metodi che funzionano sui dati all'interno di un'unità. Ciò pone restrizioni sull'accesso diretto a variabili e metodi e può impedire la modifica accidentale dei dati. Per evitare modifiche accidentali, la variabile di un oggetto può essere modificata solo tramite il metodo di un oggetto. Questi tipi di variabili sono note come variabili private.

Una classe è un esempio di incapsulamento poiché incapsula tutti i dati ovvero funzioni membro, variabili, ecc.

Incapsulamento in Python

Nell'esempio precedente, abbiamo creato la variabile c come attributo privato. Non possiamo nemmeno accedere direttamente a questo attributo e non possiamo nemmeno modificarne il valore.

Python3
# Python program to # demonstrate private members # '__' double underscore represents private attribute.  # Private attributes start with '__'. # Creating a Base class class Base: def __init__(self): self.a = 'techcodeview.com' self.__c = 'techcodeview.com' # Creating a derived class class Derived(Base): def __init__(self): # Calling constructor of # Base class Base.__init__(self) print('Calling private member of base class: ') print(self.__c) # Driver code obj1 = Base() print(obj1.a) # Uncommenting print(obj1.c) will # raise an AttributeError # Uncommenting obj2 = Derived() will # also raise an AtrributeError as # private member of base class # is called inside derived class>

Produzione
techcodeview.com>

Nota: per maggiori informazioni consultare la ns Incapsulamento in Python Esercitazione.

Astrazione dei dati

Nasconde all'utente i dettagli del codice non necessari. Inoltre, quando non vogliamo divulgare parti sensibili della nostra implementazione del codice ed è qui che è arrivata l'astrazione dei dati.

L'astrazione dei dati in Python può essere ottenuta creando classi astratte.

Programmazione orientata agli oggetti in Python | Set 2 (Nascondere i dati e stampare gli oggetti)