Maison >développement back-end >Tutoriel Python >Comment ajouter dynamiquement des propriétés à une classe Python ?

Comment ajouter dynamiquement des propriétés à une classe Python ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-14 09:17:01804parcourir

How to Dynamically Add Properties to a Python Class?

Comment ajouter dynamiquement des propriétés à une classe

En Python, il est possible de créer des propriétés d'instance de manière dynamique, vous donnant la flexibilité de modifier le comportement d'une classe pendant l'exécution. Voici comment procéder :

La première approche que vous avez tentée était incorrecte, car elle définissait c.ab sur un objet de propriété au lieu de la valeur réelle. Pour ajouter correctement une propriété, vous devez modifier la classe elle-même, pas l'instance.

class C(dict):
    pass

ks = ['ab', 'cd']
vs = [100, 200]

for i, k in enumerate(ks):
    # Define the property using classmethod
    setattr(C, k, property(lambda self: vs[i]))

c = C()
print(c.ab)  # Outputs 100

Dans ce code mis à jour, nous définissons l'appel setattr comme une méthode de classe, qui garantit que la propriété est ajoutée au classe plutôt que l’instance. La fonction lambda dans la propriété renvoie la valeur correspondante de la liste vs.

Les propriétés peuvent également être utilisées pour définir des fonctions getter et setter dynamiques, offrant une plus grande flexibilité dans la gestion des propriétés. N'oubliez pas que l'ajout de propriétés ne peut être effectué qu'au niveau de la classe, et non au niveau de l'instance, ce qui en fait un outil puissant pour personnaliser le comportement de la 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!

Déclaration:
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