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

Linda Hamilton
Libérer: 2024-11-12 10:55:03
original
746 Les gens l'ont consulté

How to Add Dynamic Properties to Classes like Dictionary Entries?

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))
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal