Je n'ai pas compris la "propriété" de python, donc Je voudrais résumer ce que j'ai recherché.
[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!".
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.
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.
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.
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