Ceci et cela des propriétés python

introduction

Je n'ai pas compris la "propriété" de python, donc Je voudrais résumer ce que j'ai recherché.

Qu'est-ce qu'une propriété en premier lieu?

[Easy Python](https://www.amazon.co.jp/%E3%81%8B%E3%82%93%E3%81%9F%E3%82%93-Python-%E3%83%97 % E3% 83% AD% E3% 82% B0% E3% 83% 9F% E3% 83% B3% E3% 82% B0% E3% 81% AE% E6% 95% 99% E7% A7% 91% E6 % 9B% B8-% E6% 8E% 8C% E7% 94% B0-% E6% B4% A5% E8% 80% B6% E4% B9% 83 / dp / 4774195782)

Je veux bien gérer les valeurs, mais je veux aussi pouvoir accéder aux valeurs naturellement comme les variables d'instance. "Properties" est le meilleur des deux mondes.

Est écrit. Le fait est que vous ne pouvez pas facilement changer la valeur de l'extérieur, et vous devriez penser que c'est utile lorsque vous voulez la retirer facilement.


nom de propriété def(self):
En traitement

'Définir une méthode pour récupérer la valeur d'une propriété'
@property
nom de propriété def(self):
valeur de retour
  
'Définir la valeur de la propriété'
@Nom de la propriété.setter
def nom de propriété (soi, valeur)
Traitement pour définir la valeur

Les propriétés sont définies comme ceci.


@property

Quand vous le voyez, pensez "Salut! Je suis venu!".

Que sont les variables d'instance?

Les propriétés sont liées aux variables d'instance, nous allons donc discuter des variables d'instance ici. Les variables d'instance sont des variables qui existent indépendamment pour chaque instance créée lorsque la classe est exécutée. C'est un peu difficile, non?


def __init__(self, message):
    self.message = message #Message de variable d'instance

Ce "self.message" est une variable d'instance. Ensuite, regardons la définition globale et le mouvement.

#Variable d'instance

class MyClass:
    def __init__(self, message):  #Initialisation: appelée automatiquement lors de la création d'une instance
        self.message = message    #Déclarez le message de variable d'instance

    def print_message(self):  #Une fonction qui affiche la valeur du message de variable d'instance
        print(self.message)  #Accéder et afficher le message de variable d'instance


instance = MyClass("instance")  #Créer une instance d'instance
python = MyClass("python")  #Créer une instance python

print(instance.message)  #est affiché comme instance
print(python.message)  #S'affiche en python

instance.print_message()  #est affiché comme instance
python.print_message()  #S'affiche en python

instance.message = 'Python' #self.Changer le contenu du message en "Python"
print(instance.message)  #S'affiche en Python=Ce qui était précédemment affiché comme "instance" a été modifié

Comme vous pouvez le voir dans le code ci-dessus, vous pouvez facilement récupérer la valeur, mais vous pouvez facilement la modifier. Si vous pouvez apporter des modifications facilement, des choses inattendues telles que des erreurs se produiront. Comme je l'ai dit plus tôt, les propriétés sont des choses qui peuvent être facilement récupérées avec une bonne gestion des changements.

Approfondissons votre compréhension en vous référant aux exemples d'utilisation.

Exemple d'utilisation de la propriété


class PropertyClass:
      def __init__(self, msg):
        self.message = msg
  
      def __str__(self):
        return self.message
    
      @propaty
      def message(self):
        return self.__message
    
      @message.setter
      def message(self, value):
        if value != '':
          self.__message = value
      
pc= PropertyClass('Hello')   #  ①
print(pc.messsage)   #Hello ②
pc.message = ''     #Changer le contenu du message de "Bonjour" à une chaîne de caractères vide ③
print(pc)           # Hello  ④
pc.message = 'Bye!' #Changer le contenu du message de "Bonjour" à "Au revoir"!⑤
print(pc)       #Bye!   ⑥

Passez "Hello" comme argument dans ①, et le contenu de "self.message" devient "Hello". (2) Lorsque la méthode de message est appelée, "Hello" est renvoyé comme valeur de retour. (3) La valeur de "message" a été remplacée par une chaîne de caractères vide. ④ Vous devriez l'avoir changé en une chaîne de caractères vide dans ③, mais "Hello" s'affiche à nouveau. Je me demande pourquoi? Lors de la définition d'une nouvelle valeur, la procédure est d'abord exécutée sur "@ message.setter".


if value != '':
          self.__message = value

Cette fois, je dis que j'accepterai les changements quand ce n'est pas une chaîne de caractères vide comme celle-ci. Par conséquent, la chaîne de caractères vide a été rejetée et "Hello" a été affiché. ⑤ J'essaierai de changer pour "Bye!" La prochaine fois sans discipline. ⑥ Cette fois, il ne s'agit pas d'une chaîne de caractères vide, la modification a donc été autorisée.

De plus, cette fois, il ne sera pas accessible directement de l'extérieur en tant que "message". N'oubliez pas que les éléments comportant deux _ tels que «» ne sont pas accessibles de l'extérieur.

Le fait est que lorsque vous définissez une nouvelle valeur comme celle-ci, vous pouvez la contrôler afin que des choses inattendues n'entrent pas.

Vous devez avoir compris le mouvement général de ce chapitre. Regardons de plus près dans le prochain chapitre.

Mouvement de propriété et de passeur

Approfondissons notre compréhension en vérifiant comment la pièce avec propriété et setter est appelée.


class Myclass:
    def __init__(self, input_name):
        self.hidden_name = input_name

    @property
    def name(self):
        print('inside the getter')
        return self.hidden_name

    @name.setter
    def name(self, input_name):
        print('inseide the setter')
        self.hidden_name = input_name


mc = Myclass('Hello') #Passez "Hello" comme argument ①
print(mc.name)     #'Hello'S'affiche comme+ 'inside the getter'S'affiche comme ②
mc.name = 'Python'    #La valeur'Python'changer en+ 'inside the setter'③
print(mc.name)        #'Python'S'affiche comme+ 'inside the getter'S'affiche comme ④

Comme vous pouvez le voir d'après le fait que «à l'intérieur du getter» est affiché dans ②, vous pouvez voir que «@ prperty» est appelé. Par contre, lors de la modification de la valeur dans ③, '@ name.setter' est appelé comme 'inside the setter'. En conséquence, la valeur est modifiée normalement en ④.

Comme vous pouvez le voir, '@ property' est appelé lors de l'appel d'une valeur, et '@ 〇〇.setter' est appelé lors de la modification d'une valeur. Et vous pouvez limiter la valeur avec «lettre» pour empêcher l'entrée de valeurs inattendues. Comme vous l'avez peut-être remarqué, il est facile d'appeler car vous n'avez pas besoin d'un '()' à la fin de l'appel.

finalement

Cette fois, nous avons expliqué les propriétés. Je pense que la compréhension sera plus rapide si les gens reconnaissent qu '"il est facile d'appeler et de définir exactement la valeur". Nous continuerons à mettre à jour les articles à l'avenir. Aussi, si vous avez le temps, jetez un œil à d'autres articles.

Recommended Posts

Ceci et cela des propriétés python
Ceci et celui de la notation d'inclusion.
matplotlib ceci et cela
Ceci et cela en utilisant Reflect
API Zabbix ceci et cela
Installation source et installation de Python
Construction d'environnement de python et opencv
L'histoire de Python et l'histoire de NaN
Installer SciPy et matplotlib (Python)
Ceci et cela appris de boost.python
Coexistence de Python2 et 3 avec CircleCI (1.0)
Ceci et cela en utilisant NLTK (mémo)
Résumé des index et des tranches Python
Réputation des livres Python et des livres de référence
Vérification de la théorie selon laquelle "Python et Swift sont assez similaires"
Installation du code Visual Studio et installation de python
Pratique d'utilisation de ceci en Python (mauvais)
Extraction de tweet.js (json.loads et eval) (Python)
Connectez beaucoup de Python ou et et
Introduction facile de la série python3 et d'OpenCV3
[Python] Diverses combinaisons de chaînes de caractères et de valeurs
Automatisation égale de l'installation de Python et PyPI
Compréhension complète du threading Python et du multitraitement
Projet Euler # 1 "Multiple de 3 et 5" en Python
Les bases de Python ①
Bases de python ①
Copie de python
Introduction de Python
Résumé de la correspondance entre les opérations de tableau ruby et python
Résumé des différences entre PHP et Python
La réponse de "1/2" est différente entre python2 et 3
Un joli nimporter qui connecte nim et python
Développement de jeux qui tirent parti de la quantique
Spécification de la plage des tableaux ruby et python
Installation de Python 3 et Flask [Résumé de la construction de l'environnement]
Comparez la vitesse d'ajout et de carte Python
[Python] Chapitre 02-01 Bases des programmes Python (opérations et variables)
Ceci est le seul examen de base de Python ~ 1 ~
Ceci est le seul examen de base de Python ~ 2 ~
Implémentation de l'arbre TRIE avec Python et LOUDS
environnement de développement python -utilisation de pyenv et virtualenv-
Liens et mémos de chaînes de code de caractères Python
Comparaison simple des bibliothèques Python qui exploitent Excel
Comparaison d'écriture R et Python (méthode de division mutuelle euclidienne)
Ceci est le seul examen de base de Python ~ 3 ~
Résumé relatif aux E / S de python et fortran
Liste de code Python à déplacer et à mémoriser
Ceci et cela utile lorsqu'il est utilisé avec nohup
Une doublure qui produit 10000 chiffres de rapport de circonférence avec Python
[Python] Une compréhension approximative des itérables, des itérateurs et des générateurs
Prise en compte des forces et faiblesses de Python
À propos des copies superficielles et profondes de Python / Ruby
Poursuite du développement multi-plateforme avec Electron et Python
Explication de la distance d'édition et de l'implémentation en Python
[Python] Type de classe et utilisation du module datetime
Exemple de lecture et d'écriture de CSV avec Python