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.
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>
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'
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, inabder.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?
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, inabder = 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!