Ce face getattr(), setattr(), hasattr(), delattr()
Aceste funcții lucrează cu atribute al căror nume îl ai doar ca text, la rulare: getattr(p, "nume") este echivalent cu p.nume, iar setattr(p, "nume", "Ana") cu p.nume = "Ana".
getattr cu o valoare implicită nu mai aruncă AttributeError când atributul lipsește. hasattr verifică existența, iar delattr șterge atributul (ca del p.nume).
Parametri
| Parametru | Descriere |
|---|---|
obiect |
Obiectul (sau clasa, modulul). |
nume |
Numele atributului, ca text. |
implicit / valoare |
Valoarea returnată dacă lipsește (getattr) sau valoarea setată (setattr). |
Ce returnează
getattr: valoarea. hasattr: True/False. setattr, delattr: None.
Exemple
Exemplul 1: Atribute dinamice
class Setari:
tema = "luminoasă"
s = Setari()
for camp, valoare in {"limba": "ro", "tema": "întunecată"}.items():
setattr(s, camp, valoare)
print(getattr(s, "tema"), getattr(s, "limba"))
print(getattr(s, "font", "implicit"))
print(hasattr(s, "limba"))
delattr(s, "limba")
print(hasattr(s, "limba"))
Rezultat
întunecată ro
implicit
True
False
Exemplul 2: Apelarea unei metode după nume
text = "Brașov"
for operatie in ["upper", "lower", "swapcase"]:
print(getattr(text, operatie)())
Rezultat
BRAȘOV
brașov
bRAȘOV
Greșeli frecvente
- Folosești
getattr(obiect, "nume")când numele este fix. Scrie directobiect.nume; funcțiile sunt pentru nume cunoscute doar la rulare.
Comenzi înrudite
dir(): Listează numele (atribute și metode) disponibile într-un obiect sau modul.globals(), locals() și vars(): Returnează dicționarele cu variabilele globale, cele locale sau atributele unui obiect.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.