"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 définir les propriétés de classe en Python : existe-t-il un décorateur @classproperty similaire à @classmethod ?

Comment définir les propriétés de classe en Python : existe-t-il un décorateur @classproperty similaire à @classmethod ?

Publié le 2024-11-08
Parcourir:970

How to Define Class Properties in Python: Is there a @classproperty decorator similar to @classmethod?

Comment définir les propriétés de classe en Python

En Python, vous pouvez ajouter des méthodes à une classe à l'aide du décorateur @classmethod. Mais existe-t-il un mécanisme similaire pour définir les propriétés de classe ?

Certainement. Python fournit le décorateur @classproperty à cet effet. Sa syntaxe et son utilisation ressemblent beaucoup à celles de @classmethod:

class Example(object):
    the_I = 10
    
    @classproperty
    def I(cls):
        return cls.the_I

Le décorateur @classproperty crée une propriété de classe nommée I. Vous pouvez accéder à cette propriété directement sur la classe elle-même, comme ceci :

Example.I  # Returns 10

Si vous souhaitez définir un setter pour votre propriété de classe, vous pouvez utiliser le décorateur @classproperty.setter :

@I.setter
def I(cls, value):
    cls.the_I = value

Vous pouvez désormais définir directement la propriété de classe :

Example.I = 20  # Sets Example.the_I to 20

Approche alternative : ClassPropertyDescriptor

Si vous préférez une approche plus flexible, envisagez d'utiliser la classe ClassPropertyDescriptor. Voici comment cela fonctionne :

class ClassPropertyDescriptor(object):

    def __init__(self, fget, fset=None):
        self.fget = fget
        self.fset = fset

    # ... (method definitions)

def classproperty(func):
    return ClassPropertyDescriptor(func)

Avec cette approche, vous pouvez définir les propriétés de classe comme suit :

class Bar(object):

    _bar = 1

    @classproperty
    def bar(cls):
        return cls._bar

Vous pouvez définir la propriété de classe en utilisant son setter (si défini) ou en modifiant son attribut sous-jacent :

Bar.bar = 50
Bar._bar = 100

Cette solution étendue offre plus de contrôle et de flexibilité lorsque vous travaillez avec des propriétés de classe en 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