"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment ajouter des propriétés dynamiques aux classes comme les entrées de dictionnaire ?

Comment ajouter des propriétés dynamiques aux classes comme les entrées de dictionnaire ?

Publié le 2024-11-08
Parcourir:161

How to Add Dynamic Properties to Classes like Dictionary Entries?

Ajout de propriétés dynamiques aux classes

Dans la quête pour 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 à l'aide de :

setattr(self, k, property(lambda x: vs[i], self.fn_readyonly))

Cependant, cela a généré 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 efficacement la plomberie du système OO de Python.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3