Fonction property() – Python
La fonction property() est utilisée pour définir les propriétés dans une classe Python.
Considérez le script Python suivant qui définit la classe Person comme ayant les méthodes getter et setter. La méthode getAge() renvoie la valeur de l’attribut privée __age, tandis que la méthode setAge() affecte la valeur à l’attribut __age.
class Person: def __init__(self, age=25): self.__age = age def setAge(self, age): self.__age = age def getAge(self): return self.__age p = Person() age = p.getAge() print(age) # cela affiche 25 p.setAge(40) age = p.getAge() print(age) # cela affiche 40
Comme vous pouvez le voir ci-dessus, la méthode p.getAge() renvoie la valeur de l’attribut __age et la méthode setAge() lui attribue une valeur. Cependant, ce serait bien si les fonctions getter et setter étaient appelées implicitement lorsque nous accédions à un attribut. C’est là que la fonction intégrée property() de Python est utile.
La méthode property() prend les méthodes get, set et delete comme arguments et renvoie un objet de la classe property.
Syntaxe:
property(fget, fset, fdel, doc)
Paramètres:
- fget() : utilisé pour récupérer la valeur de l’attribut
- fset() : utilisé pour définir la valeur de l’attribut
- fdel() : utilisé pour supprimer la valeur d’attribut
- doc() : chaîne contenant la documentation (docstring) de l’attribut
Valeur de retour:
La méthode property() retourne l’attribut de property du getter, setter et deleter donné.
Exemple:
L’exemple suivant montre comment créer une property en Python à l’aide de la fonction property().
class Person: def __init__(self): self.__age = '' def setAge(self, age): self.__age = age def getAge(self): return self.__age age = property(getAge, setAge) p = person() p.age = 40 print(p.age)
Sortie:
40
Comme vous pouvez le voir ci-dessus, la méthode getAge() est appelée automatiquement lorsque nous accédons à la propriété age. De la même manière, la méthode setAge est appelée lorsque nous attribuons une valeur à la propriété age. Il masque également l’attribut d’instance __age.
De la même manière, vous pouvez spécifier une méthode deleter pour la propriété, comme indiqué dans le script ci-dessous.
class Person: def __init__(self): self.__age = '' def setAge(self, age): self.__age = age def getAge(self): return self.__age def delAge(self): del self.__age age = property(getAge, setAge, delAge)
La fonction delAge() serait invoquée lorsque vous supprimez la propriété age.
del p.age
Le decorator @property facilite la déclaration d’une property au lieu d’appeler la fonction property(). Nous allons découvrir cela dans le chapitre suivant.