Ajout de propriétés dynamiques aux classes
Dans la quête visant à simuler un jeu de résultats de base de données à l'aide de classes fictives, un défi se pose : comment attribuer des propriétés dynamiques propriétés à une instance qui ressemblent à celles d’un dictionnaire. Cela implique de créer des propriétés qui se comportent comme des attributs avec des valeurs spécifiques.
Au départ, une approche prometteuse impliquait l'attribution de propriétés en utilisant :
setattr(self, k, property(lambda x: vs[i], self.fn_readyonly))
Cependant, cela produisait des objets de propriété au lieu du comportement souhaité.
La solution réside dans l'ajout de propriétés à la classe elle-même, plutôt qu'à des instances individuelles. Voici comment cela fonctionne :
class Foo(object): pass foo = Foo() foo.a = 3 Foo.b = property(lambda self: self.a + 1) print(foo.b) # Prints 4
Dans cet exemple, nous ajoutons une propriété b à la classe Foo en utilisant le descripteur de propriété. Lors de l'accès à foo.b, Python appelle la méthode __get__ du descripteur et transmet l'instance de classe comme argument. La méthode __get__ renvoie ensuite la valeur de la propriété, qui est calculée comme self.a 1.
Les propriétés fournissent un moyen pratique de définir un comportement personnalisé pour les attributs, exposant ainsi efficacement la plomberie du système OO de Python.
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!