lettura facile

I metodi di istanza in Python

In Python i metodi di istanza sono metodi definiti all'interno di una classe che operano su un'istanza specifica della classe.

Questi metodi possono accedere e modificare lo stato dell'oggetto e interagire con altri metodi e attributi della stessa classe.

Quando un metodo di istanza viene chiamato tramite un'istanza della classe, l'istanza stessa viene passata automaticamente come primo argomento al metodo.

Questo argomento è comunemente chiamato `self`.

class Foo:
def foo(self):
     print(self)

Quindi, è necessario definire i metodi di istanza in una classe con almeno un parametro self che rappresenta l'istanza sulla quale il metodo opera e permette di accedere ai suoi attributi e metodi.

Utilizzando self puoi accedere e modificare gli attributi dell'istanza.

Il parametro self deve essere il primo parametro di ogni metodo di istanza, anche se non viene passato esplicitamente quando il metodo viene chiamato.

Oltre ai metodi di istanza, esistono anche i metodi di classe e i metodi statici. I metodi di classe usano il decoratore @classmethod e ricevono come primo parametro la classe stessa (cls), mentre i metodi statici usano @staticmethod e non ricevono né l'istanza né la classe come parametro.

Iniziamo con un esempio semplice.

Immagina di voler creare una classe per rappresentare una persona. La classe avrà alcuni attributi, come nome e età, e metodi per interagire con questi attributi.

class Persona:
   def __init__(self, nome, età):
       self.nome = nome
       self.età = età

   def descrivi(self):
       return f"{self.nome} ha {self.età} anni."

   def invecchia(self, anni):
       self.età += anni

Il metodo descrivi(self) ti permette di visualizzare l'attributo "età" della persona.

Il metodo invecchia(self, anni), invece, ti consente di aumentare l'età della persona.

Il metodo __init__ è un metodo speciale chiamato "costruttore". Viene eseguito automaticamente quando creiamo una nuova istanza della classe. Serve a inizializzare gli attributi dell'istanza. In questo caso, nome e età vengono inizializzati con i valori passati come argomenti.

Ora crea un'istanza "persona1" della classe Persona.

persona1 = Persona("Alice", 30)

Poi chiama il metodo di istanza descrivi()

Questo metodo legge e visualizza l'età della persona all'interno dell'istanza "persona1".

print(persona1.descrivi())

Alice ha 30 anni.

Infine, chiama il metodo invecchia(5).

Questo metodo aumenta di 5 anni l'età della persona all'interno dell'istanza "persona1". 

Poi chiama nuovamente il metodo descrivi() per visualizzare il dato aggiornato.

persona1.invecchia(5)
print(persona1.descrivi())

Alice ha 35 anni.

Come avrai notato, entrambi i metodi sono stati chiamati dall'istanza "persona1 e agiscono all'interno dell'istanza stessa.

Perché il parametro self è importante? Quando un metodo di istanza viene chiamato su un oggetto (istanza), l'oggetto stesso viene passato automaticamente come primo argomento e memorizzato nel parametro "self". Un errore comune è dimenticare di includere `self` come primo parametro nella definizione di un metodo di istanza. In questi casi Python genera un errore perché si aspetta che il metodo accetti l'istanza come primo argomento. Ad esempio, definisci il metodo di istanza descrivi() senza specificare il parametro self.

class Persona:
   def __init__(self, nome, età):
       self.nome = nome
       self.età = età

   def descrivi():
     return f"{nome} ha {età} anni."

Poi crea un'istanza "persona1" della classe "Persona" e chiama il metodo descrivi() dall'istanza.

persona1 = Persona("Alice", 30)

print(persona1.descrivi())

In questo caso Python restituisce un messaggio di errore.

TypeError: Persona.descrivi() takes 0 positional arguments but 1 was given

L'errore viene generato perché il metodo descrivi() non è definito per accettare l'istanza (`self`) come argomento. Pertanto, non puoi chiamarlo da un'istanza. Quindi, ricorda sempre di includere `self` come primo parametro nei metodi di istanza se vuoi evitare questo errore comune.

A questo punto dovresti sapere tutto ciò che è necessario per lavorare con i metodi di istanza in Python.




Se qualcosa non ti è chiaro, scrivi la tua domanda nei commenti.




FacebookTwitterLinkedinLinkedin