Python >> Tutoriel Python >  >> Python

Propriété Python() — Ce que vous avez toujours voulu savoir mais que vous n'avez jamais osé demander

L'orientation objet est un excellent moyen d'encapsuler des données dans votre application. Cela minimise la complexité et respecte les bons principes d'ingénierie logicielle.

Cependant, les attributs en Python sont facilement accessibles de l'extérieur - ils ne sont pas vraiment encapsulés. C'est l'une des raisons pour lesquelles le property() une fonction intégrée existe :elle permet de encapsuler véritablement les données au moyen d'attributs privés auquel vous pouvez accéder via getter et setter fonctions de l'extérieur.

property() intégré de Python La fonction crée et renvoie un nouvel attribut de propriété qui doit être privé, c'est-à-dire accessible uniquement via des fonctions définies. En tant qu'arguments, vous transmettez trois fonctions pour obtenir, définir et supprimer la valeur de l'attribut, ainsi que la quatrième docstring dispute. Les quatre arguments sont None par défaut.

Voici la syntaxe formelle et la liste des arguments du property() fonction :

property(fget=None, fset=None, fdel=None, doc=None)
Arguments fget Objet fonction appelable pour obtenir une valeur d'attribut. Renvoie la valeur de l'attribut.
fset Objet fonction appelable pour définir une valeur d'attribut. Aucune valeur de retour requise.
fdel Objet fonction appelable pour supprimer une valeur d'attribut. Aucune valeur de retour requise.
doc Chaîne décrivant la documentation de l'attribut.
Valeur de retour property Renvoie un nouvel objet de classe property qui vous permet d'accéder à la propriété de l'extérieur via des méthodes getter et setter définies.

Propriété Python() – Exemples d'utilisation

Apprenez par l'exemple ! Dans ce qui suit, nous allons explorer un exemple de pourquoi et comment utiliser le property() fonction intégrée.

Jetez un oeil à ce simple Car classe pour laquelle on crée un "secret" _owner attribut—notez le trait de soulignement préfixé pour décourager l'accès externe :

class Car:

    def __init__(self):
        self._owner = None

    def get_owner(self):
        return self._owner

    def set_owner(self, name):
        self._owner = name

    def delete_owner(self):
        del self._owner


porsche = Car()
porsche.set_owner('Chris')
print(porsche.get_owner())
# Chris

L'attribut propriétaire a une fonction getter, une fonction setter et une fonction delete qui supprime l'attribut.

Cela suit les directives de l'orientation objet pour permettre l'accès externe aux attributs d'objet uniquement via des fonctions plutôt que directement via porsche._owner . Cependant, l'utilisation de noms de fonction getter et setter compliqués peut être pénible. C'est pourquoi vous pouvez également ajouter une ligne supplémentaire en utilisant le property() fonction pour faire _owner une propriété plutôt qu'un simple attribut :

class Car:

    def __init__(self):
        self._owner = None

    def get_owner(self):
        return self._owner

    def set_owner(self, name):
        self._owner = name

    def delete_owner(self):
        del self._owner

    # Creates a property: Car.owner
    owner = property(get_owner,
                     set_owner,
                     delete_owner,
                     'Owner of the car')
    

porsche = Car()
porsche.owner = 'Chris'
print(porsche.owner)
# Chris

Cela facilite grandement l'accès à l'attribut. Au lieu d'appeler le maladroit porsche._owner ou même porsche.get_owner() , vous pouvez maintenant appeler le porsche.owner comme si le propriétaire était un attribut. Python appelle ensuite en interne les fonctions getter et setter définies pour modifier, accéder ou supprimer l'attribut _owner .

Propriété Python() — Vidéo


Mais avant de continuer, je suis ravi de vous présenter mon nouveau livre Python Python One-Liners (Lien Amazon).

Si vous aimez les one-liners, vous allez adorer le livre. Il vous apprendra tout ce qu'il y a à savoir sur une seule ligne de code Python. Mais c'est aussi une introduction à l'informatique , science des données, apprentissage automatique et algorithmes. L'univers en une seule ligne de Python !

Le livre est sorti en 2020 avec l'éditeur de livres de programmation de classe mondiale NoStarch Press (San Francisco).

Lien :https://nostarch.com/pythononeliners

Propriété Python() – Exercice de code interactif

Jetons un coup d'œil à un exercice pratique :

Exercice :Remplacer les deux occurrences de ??? avec un code pour faire de vous le propriétaire de la Porsche !


Résumé

L'orientation objet est un excellent moyen d'encapsuler des données dans votre application. Cela minimise la complexité et respecte les bons principes d'ingénierie logicielle.

Cependant, les attributs en Python sont facilement accessibles de l'extérieur - ils ne sont pas vraiment encapsulés. C'est l'une des raisons pour lesquelles le property() une fonction intégrée existe :elle permet de encapsuler véritablement les données au moyen d'attributs privés auquel vous pouvez accéder via getter et setter fonctions de l'extérieur.

property() intégré de Python La fonction crée et renvoie un nouvel attribut de propriété qui doit être privé, c'est-à-dire accessible uniquement via des fonctions définies. En tant qu'arguments, vous transmettez trois fonctions pour obtenir, définir et supprimer la valeur de l'attribut, ainsi que la quatrième docstring dispute. Les quatre arguments sont None par défaut.


J'espère que vous avez apprécié l'article! Pour améliorer votre formation Python, vous pouvez rejoindre la populaire et gratuite Finxter Email Academy :

Voulez-vous améliorer vos compétences Python d'une manière amusante et facile à consommer ? Considérez les ressources suivantes et devenez un maître codeur !


Prochain article