Ajout dynamique de propriétés en Python
En Python, l'ajout dynamique de propriétés aux classes présente un défi unique. Au départ, on pourrait tenter d'ajouter des propriétés directement aux instances de classe en utilisant setattr. Cependant, cette approche attribue un objet de propriété à l'attribut, annulant ainsi le comportement souhaité.
La solution
Pour ajouter une propriété de manière dynamique, elle doit être ajoutée directement au classe elle-même. Prenons l'exemple suivant :
class Foo(object): pass foo = Foo() foo.a = 3 # Dynamically add property 'b' to class Foo.b = property(lambda self: self.a + 1) print(foo.b) # Outputs 4
Comprendre les descripteurs
Les propriétés en Python sont implémentées à l'aide de descripteurs. Les descripteurs sont des objets qui gèrent l'accès aux attributs sur une classe spécifique. Ils possèdent des méthodes get__, __set__ ou __delete qui définissent la manière dont l'attribut est accédé, défini ou supprimé.
Python appelle Foo.b.__get__(foo, Foo) lors de l'accès à foo. b, et la valeur de retour devient la valeur de l'attribut. Dans ce cas, le descripteur de propriété appelle sa méthode fget, en transmettant la valeur de l'instance.
Objets de méthode en tant que descripteurs
Les méthodes elles-mêmes sont un autre type de descripteur. Leur méthode get ajoute l'instance appelante comme premier argument, la liant efficacement à l'instance.
En résumé, l'ajout dynamique de propriété en Python nécessite d'attacher la propriété à la classe elle-même, en tirant parti de Python système de descripteurs. Cela permet une gestion personnalisée des attributs par classe.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!