CodeGym /Corsi /Python SELF IT /Creazione di classi e oggetti

Creazione di classi e oggetti

Python SELF IT
Livello 15 , Lezione 3
Disponibile

3.1 Creazione di una classe

Creare classi in Python è una parte importante della programmazione orientata agli oggetti (OOP). Le classi permettono di creare nuovi tipi di dati, che possono avere i propri attributi e metodi. Diamo un'occhiata ai concetti di base e agli esempi di creazione di classi in Python.

Concetti di base

  • Classe: un modello per la creazione di oggetti. La classe definisce attributi e metodi che avranno gli oggetti di quella classe.
  • Oggetto: un'istanza della classe. Un oggetto possiede tutti gli attributi e i metodi definiti nella classe.
  • Attributo: una variabile associata a una classe o a un oggetto.
  • Metodo: una funzione associata a una classe o a un oggetto.

Gli attributi sono, in sostanza, variabili interne dell'oggetto o della classe. I metodi sono funzioni definite all'interno della classe. Questi termini provengono dall'OOP e vengono usati al pari di funzioni e variabili.

Per dichiarare (creare) una nuova classe si utilizza la parola chiave class. La sintassi generale di questa operazione è la seguente:


class NomeClasse:
    variabile1 = valore1
    variabileN = valoreN
          
    def funzione1(self):
        codice funzione
            
    def funzioneM(self):
        codice funzione

In pratica, si può dire che una classe è un piccolo programma (variabili + funzioni), inserito in un'area nominata separata — NomeClasse.

Dopo aver creato una classe, puoi creare oggetti (istanze) di quella classe. Questo codice appare ancora più semplice:


variabileX = NomeClasse()

Importante! I nomi delle variabili e dei metodi in Python sono solitamente scritti con la lettera minuscola. I nomi delle classi sono scritti con la maiuscola. Inoltre, nei nomi delle classi non si usano i caratteri di sottolineatura. Se il nome della classe deve essere composto da più parole, ognuna di esse è scritta con la maiuscola.

Se vuoi accedere a una variabile della classe/oggetto, di solito questo codice ha questo aspetto:


variabileX.variabile1 = 10
variabileX.funzioneM()       

Ma qui ci sono delle sfumature, di cui sotto...

3.2 Lavorare con l'oggetto

Sia la classe che un'istanza della classe (oggetto della classe) sono oggetti, quindi sia il primo che il secondo possono avere le proprie variabili e metodi.

Esistono due tipi di variabili:

  • Attributo/Variabile/Campo della classe (class property)
  • Attributo/Variabile/Campo dell'oggetto (object property)

Ci sono anche tre tipi di metodi:

  • Metodo/Funzione della classe (class method)
  • Metodo/Funzione dell'oggetto (instance method)
  • Metodo statico (static method)

I metodi si differenziano per il modo in cui vengono dichiarati e per come vengono chiamati.

Metodi dell'oggetto

Quando dichiari un metodo dell'oggetto, devi passare il primo parametro obbligatorio — self. Quando chiami il metodo, a questo parametro viene passata un riferimento all'oggetto (instance).


class MyClass:

    def instance_method(self):
        print(type(self))  # <class 'MyClass'>
                   

my_object = MyClass()
my_object.instance_method()
        

Nell'esempio sopra, quando la funzione instance_method() ha iniziato a essere eseguita, al parametro self è stato passata un riferimento all'oggetto my_object.

Metodi della classe

Quando dichiari un metodo della classe, devi anche passare il primo parametro obbligatorio — cls. Quando chiami il metodo, a questo parametro viene passata un riferimento alla classe (class object). Inoltre, il metodo della classe deve essere decorato con il decoratore classmethod, come nell'esempio sotto:


class MyClass:
    def instance_method(self):
        print(type(self))  # <class 'MyClass'>
        
    @classmethod
    def class_method(cls):
        print(type(cls))  # <class 'type'>
                   

my_object = MyClass()
my_object.instance_method()
MyClass.class_method()
        

Nell'esempio sopra, quando la funzione class_method() ha iniziato a essere eseguita, al parametro cls è stato passata un riferimento alla classe MyClass.

Metodo statico

Quando dichiari un metodo statico, non devi passare nulla, ma neppure può accedere ai dati interni della classe. Anche il metodo deve essere decorato con il decoratore staticmethod, come nell'esempio sotto:


class MyClass:
    def instance_method(self):
        print(type(self))  # <class 'MyClass'>
        
    @classmethod
    def class_method(cls):
        print(type(cls))  # <class 'type'>
        
    @staticmethod
    def static_method():
        return "Questo metodo non dipende da istanza o classe"
                   
my_object = MyClass()
my_object.instance_method()
MyClass.class_method()
MyClass.static_method() 
        

Il metodo statico viene chiamato in modo simile al metodo della classe, ma non vengono passati né riferimento all'oggetto, né riferimento alla classe.

3.3 Variabili della classe

Variabili della classe

Per dichiarare una variabile (attributo) della classe, è sufficiente dichiararla in qualsiasi punto all'interno della classe. Di solito questo viene fatto all'inizio, prima della dichiarazione dei metodi della classe. Esempio:


class MyClass:
    attribute = "Sono un attributo della classe"
        
    @classmethod
    def class_method(cls):
        print(cls.attribute)  # Sono un attributo della classe
                  
my_object = MyClass()
MyClass.class_method()

Se vuoi leggere o scrivere un valore in una variabile della classe, utilizza l'oggetto cls.

In linea di principio, puoi accedere a una variabile della classe anche attraverso il nome della classe:


class MyClass:
    attribute = "Sono un attributo della classe"
        
    @classmethod
    def class_method(cls):
        print(MyClass.attribute)  # Sono un attributo della classe
                  
my_object = MyClass()

print(MyClass.attribute)  # Sono un attributo della classe

Variabili/campi dell'oggetto

Le variabili dell'oggetto (instance) sono i campi dell'oggetto self. Lavori semplicemente con loro tramite self.name. È proprio per questo che l'oggetto self viene passato a ogni metodo dell'oggetto.

Esempio:


class MyClass:
    attribute = "Sono un attributo della classe"
        
    def set_name(self, name):
        self.name = name
        
    def print_name(self):
        print(self.name)    
                 
my_object = MyClass()
my_object.set_name("Campo dell'oggetto chiamato name") 
my_object.print_name()  # "Campo dell'oggetto chiamato name"
        

Ogni volta che chiami un metodo dell'oggetto, come primo parametro (self) viene passata una riferimento all'oggetto, su cui chiami il metodo. Diversi metodi dell'oggetto possono accedere a dati comuni tramite l'uso dell'oggetto self.

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION