![Python lessons - 7.6 Metodi di classe e metodi statici](https://www.meccanismocomplesso.org/wp-content/uploads/2018/04/Python-lessons-7.6-Metodi-di-classe-e-metodi-statici-1024x203.jpg)
Metodi di Classe
I metodi degli oggetti che abbiamo visto finora vengono chiamati attraverso il nome dell’istanza della classe (oggetto) , che viene passato come parametro self all’interno del metodo.
I metodi di classe sono diversi. Questi metodi vengono chiamati direttamente dalla classe che viene passata come parametro cls all’interno del metodo. I metodi di classe vengono marcati con un decoratore @classmethod. Generalmente questi metodi servono per istanziare una nuova istanza di classe, passando dei parametri diversi rispetto a quelli richiesti dal costruttore.
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def calculate_area(self):
return self.width * self.height@classmethod
def new_square(cls, side_length):
return cls(side_length, side_length)
square = Rectangle.new_square(5)
print(square.calculate_area())
eseguendo
>>>
25
Come possiamo vedere abbiamo utilizzato il metodo di classe per creare una nuova istanza utilizzando un solo parametro (lato) invece che i due richiesti dal costruttore (lunghezza, altezza)
Metodi Statici
I metodi statici sono molto simili ai metodi di classe. Si riconoscono per il fatto che hanno un decoratore @staticmethod prima della definizione.
class Pizza:
def __init__(self, toppings):
self.toppings = toppings
@staticmethod
def validate_topping(topping):
if topping == "pineapple":
raise ValueError("No pineapple")
else:
return Trueingredients = ["cheese","onions","tomato"]
if all(Pizza.validate_topping(i) for i in ingredients):
Pizza = Pizza(ingredients)
Dall’esempio di sopra vediamo un possibile uso, come metodo di validazione con un controllo sugli argomenti prima di istanziare un nuovo oggetto della classe.