Un rinfrescante aggiornamento su classi e oggetti di Python

Python viene fornito con molti tipi di dati incorporati, come dict, list, set, ecc. Vi siete mai chiesti se è possibile creare i propri tipi di dati? Piace persona, auto, Università, eccetera.? La creazione di tali tipi di dati sarebbe possibile? Sì, questo è certamente possibile in Python, ed è qui che entrano in gioco classi e oggetti.

In questo tutorial, descriverò cosa si intende per a classe e un oggetto, e come possiamo lavorare con loro in Python.

Classi e oggetti

Come menzionato sopra, le classi e gli oggetti riguardano la creazione del proprio tipo di dati (cioè tipi di dati definiti dall'utente). UN classe è quindi un tipo di dati definito dall'utente e creare istanze di una classe (creazione di istanze) significa creare oggetti di quel tipo. Alla fine della giornata, le classi e gli oggetti sono considerati i principali elementi costitutivi di Python, che è un linguaggio di programmazione orientato agli oggetti.

Come sarebbe stato creare una classe in Python? La struttura di classe più semplice in Python si presenta come segue:

class ClassName: dichiarazioni

Come puoi vedere, la definizione di una classe inizia con classe parola chiave, e nome della classe è il nome della classe (identificatore). Tieni presente che il nome della classe segue le stesse regole dei nomi delle variabili in Python, ovvero il nome può iniziare solo con una lettera o un trattino basso _, e può contenere solo lettere, numeri. o underscore. Inoltre, facendo riferimento a PEP 8 (Style Guide for Python Code), possiamo vedere che è consigliabile assegnare un nome alle classi nello stile CapWords (upper CamelCase).

Definiamo ora una classe Persona, che al momento non conterrà nulla, tranne il passaggio dichiarazione. Come menzionato nella documentazione di Python:

Il passaggio la dichiarazione non fa nulla. Può essere utilizzato quando un'istruzione è richiesta sintatticamente ma il programma non richiede alcuna azione
classe Persona: pass

Per creare un'istanza (oggetto) di questa classe, possiamo semplicemente fare quanto segue:

abder = Persona ()

Ciò significa che abbiamo creato un nuovo oggetto Abder di tipo Persona. Si noti che la creazione di un oggetto sta semplicemente avendo il nome della classe seguito da parentesi.

Possiamo identificare quale tipo Abder è, e dove appartiene in memoria digitando: stampare abder. In questo caso, otterrai qualcosa di simile al seguente:

<__main__.Person instance at 0x109a1cb48>

attributi

Gli attributi sono come proprietà che vogliamo aggiungere alla classe (tipo). Ad esempio, per la nostra classe Person, aggiungiamo due attributi: nome e scuola, come segue:

classe Persona: name = "school ="

Ora, possiamo creare un nuovo oggetto di tipo Persona (istanza di persona) con maggiori dettagli, dal momento che ora ha alcuni attributi, come segue:

abder = Person () abder.name = 'Abder' abder.school = 'ABC University'

metodi

I metodi sono come le funzioni in Python, in quanto sono definiti con la parola chiave DEF e hanno la stessa formattazione delle funzioni. Nella nostra classe, definiamo un metodo che stampa il nome e la scuola della persona. La classe avrà il seguente aspetto:

class Persona: name = "school =" def print_name (self): print self.name def print_school (self): print self.school abder = Person () abder.name = 'Abder' abder.school = 'XY University' abder .print_name () abder.print_school ()

Ho detto sopra che i metodi sono come le funzioni. Ma la differenza principale è che i metodi devono avere un argomento chiamato convenientemente se stesso, che si riferisce all'oggetto su cui viene chiamato il metodo (cioè abder). Si noti che nel chiamare il metodo non è necessario passare se stesso come argomento, dato che Python lo gestirà per noi.

Se non lo facciamo se stesso come argomento in print_name (), ecco come si lamenterà Python:

Traceback (ultima chiamata più recente): file "test.py", riga 14, in  abder.print_name () TypeError: print_name () non accetta argomenti (1 dato)

Ovviamente puoi passare più di un argomento al metodo. Facciamo il processo di stampa del nome e scuola in un metodo, come segue:

class Persona: name = "school =" def print_information (self, name, school): stampa self.name print self.school abder = Person () abder.name = 'Abder' abder.school = 'XY University' abder.print_information (abder.name, abder.school) 

Prova ad eseguire il programma: hai ottenuto lo stesso risultato di prima?

Inizializzazione

Nella sezione precedente, abbiamo inizializzato nome e scuola dando loro un valore vuoto ". Ma c'è un modo più elegante di inizializzare le variabili ai valori predefiniti, ed ecco dove inizializzazione torna utile.

L'inizializzatore è un metodo speciale con il nome __dentro__ (il metodo è considerato speciale e verrà trattato in un caso speciale, ed è per questo che ci sono caratteri di sottolineatura doppio all'inizio e alla fine).

Modifichiamo il programma precedente per usare l'inizializzatore. In questo caso, il programma avrà il seguente aspetto:

classe Persona: def __init __ (self, n, s): self.name = n self.school = s def print_name (self): print self.name def print_school (self): print self.school abder = Person ('Abder' , 'XY University') abder.print_name () abder.print_school ()

Si noti che l'inizializzatore qui deve avere due argomenti. Ad esempio, se non includiamo il n argomento nell'inizializzatore, avremo il seguente errore:

Traceback (ultima chiamata più recente): file "test.py", riga 12, in  abder = Person ('Abder', 'XY University') TypeError: __init __ () richiede esattamente 2 argomenti (3 dati)

Quindi la linea di fondo è che con classi sarai in grado di creare i tuoi tipi di dati personali e con oggetti sarai in grado di creare istanze di quei tipi di dati. Anche le classi sono composte da attributi (proprietà) e metodi che sono azioni che eseguiamo su quegli attributi.

Qual è stato quel tipo di dati che hai sempre voluto creare? Vai avanti e fallo!