Tout en Python est objet, et presque tout a des attributs et des méthodes. En Python, les fonctions sont aussi des objets. Elles ont donc des attributs comme les autres objets. Toutes les fonctions ont un attribut intégré __doc__, qui renvoie la description définie dans le code source de la fonction. Il est également possible d'attribuer de nouveaux attributs aux fonctions, ainsi que récupérer les valeurs de ces attributs.
Pour gérer les attributs, Python nous fournit deux fonctions getattr et setattr, qui prennent respectivement deux et trois arguments. Il n'y a aucune différence entre la fonction setattr et l'utilisation d'un point à droite de l'objet suivi du nom de l'attribut, ensuite du signe = et de la valeur de l'attribut.
Pour obtenir une liste complète des attributs et méthodes d'un objet en Python, on utilise la fonction dir(). Les attributs définis uniquement par l'utilisateur peuvent être listés en utilisant la fonction vars().
Le code ci-dessous montre comment définir et récupérer les attributs d'une fonction en Python.
Exemple
def person():
"""
Description d'une personne.
"""
pass
setattr(person, 'age', 19 )
setattr(person, 'name', 'John Doe' )
print(getattr(person, 'age'))
person.gender ='male'
print("ADescription de la fonction person :")
print(person.__doc__)
print("Attribut gender :")
print(person.gender)
print("Attribut name :")
print(person.name)
print("Attribut age :")
print(person.age)
print("Tous les attributs de la fonction person :")
print(dir(person))
print("Attributs définis par l'utilisateur :")
print(vars(person))
Résultat
19
Description de la fonction person :
Description d'une personne.
Attribut gender :
male
Attribut name :
John Doe
Attribut age :
19
Tous les attributs de la fonction person :
['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'age', 'gender', 'name']
Attributs définis par l'utilisateur :
{'age': 19, 'name': 'John Doe', 'gender': 'male'}