Ce face classmethod() și staticmethod()
O metodă obișnuită primește obiectul ca self. Cu @classmethod, primește clasa ca cls; se folosește mai ales pentru „constructori alternativi”, de exemplu crearea unui obiect dintr-un text sau dintr-un dicționar.
Cu @staticmethod, metoda nu primește nimic automat: este o funcție obișnuită pusă în clasă pentru că ține de ea logic. Ambele pot fi apelate pe clasă sau pe obiect.
Parametri
| Parametru | Descriere |
|---|---|
function |
Funcția transformată (de obicei se folosește forma cu decorator). |
Ce returnează
Un obiect classmethod sau staticmethod.
Exemple
Exemplul 1: Constructor alternativ și funcție ajutătoare
class Data:
def __init__(self, zi, luna, an):
self.zi, self.luna, self.an = zi, luna, an
@classmethod
def din_text(cls, text):
zi, luna, an = map(int, text.split("."))
return cls(zi, luna, an)
@staticmethod
def e_bisect(an):
return an % 4 == 0 and (an % 100 != 0 or an % 400 == 0)
d = Data.din_text("19.10.2026")
print(d.zi, d.luna, d.an)
print(Data.e_bisect(2024), d.e_bisect(2026))
Rezultat
19 10 2026
True False
Greșeli frecvente
- Uiți decoratorul și apelezi metoda pe clasă: primești
TypeError: missing 1 required positional argument.
Comenzi înrudite
class: Definește o clasă: un șablon pentru obiecte care au date (atribute) și comportament (metode).property(): Transformă o metodă într-un atribut calculat, cu verificare la citire și la scriere.super(): Apelează metoda clasei părinte dintr-o clasă care o moștenește.