@property : transformer une méthode en attribut
Calcule et protège des attributs grâce au décorateur @property.
Le décorateur @property
@property te permet de calculer ou protéger un attribut, tout en
gardant la syntaxe simple obj.nom (sans parenthèses).
Exemple : attribut calculé
class Cercle:
def __init__(self, rayon):
self.rayon = rayon
@property
def aire(self):
return 3.14159 * self.rayon ** 2
c = Cercle(5)
print(c.aire) # 78.53975 ← pas de parenthèses, on dirait un attribut
Sans @property, il faudrait écrire c.aire().
Validation avec un setter
class Personne:
def __init__(self, age):
self.age = age # appellera le setter
@property
def age(self):
return self._age
@age.setter
def age(self, valeur):
if valeur < 0:
raise ValueError("L'âge ne peut pas être négatif")
self._age = valeur
p = Personne(10)
print(p.age) # 10
p.age = 11 # ok
p.age = -5 # ❌ ValueError
Pourquoi les _age au lieu de age ?
Parce que age est maintenant un getter, pas un attribut. On stocke
la valeur "réelle" dans _age (le _ indique "interne").
Read-only (lecture seule)
Sans setter, l'attribut devient non modifiable :
class Cercle:
def __init__(self, rayon):
self.rayon = rayon
@property
def diametre(self):
return 2 * self.rayon
c = Cercle(5)
print(c.diametre) # 10
c.diametre = 20 # ❌ AttributeError : can't set attribute
Cas d'usage typique
class Carre:
def __init__(self, cote):
self.cote = cote
@property
def perimetre(self):
return 4 * self.cote
@property
def aire(self):
return self.cote ** 2
c = Carre(5)
print(c.perimetre) # 20
print(c.aire) # 25
💡 En Python, on commence simple : attribut normal. On passe à
@propertyseulement si on a besoin de calcul ou de validation. Pas besoin de getters/setters partout comme en Java !
🧪 Quiz de validation
Réponds à toutes les questions. Il faut 70% de bonnes réponses pour valider le tuto !
🔒 Tu dois être connecté pour passer le quiz.