J'obtiens un attribut impossible à définir lors de l'utilisation de @property en python

Je suis une personne qui écrit du code en python

Cependant, comme je suis encore débutant, je m'ennuie souvent des erreurs. Parmi eux, j'écris cette fois avec l'intention de réapprendre les setters et les getters de la classe que j'ai laissés flous jusqu'à présent. Allons-y!

python 3.7.4

Impossible de définir l'attribut reste bloqué

Il y a des moments où vous voulez obtenir ce que la classe a généré. Que feriez-vous dans un tel cas?

practice01.py


class C(object):
    def __init__(self) -> None:
        self.x = 1


c = C()
r = c.x
print(r)
# 1

C'est facile à écrire. Mais si vous voulez utiliser @property ou quelque chose comme ça

practice02.py


class C(object):
    def __init__(self) -> None:
        self.x = 1

    @property
    def x(self):
        if self.x is None:
            return None
        return self.x


c = C()
r = c.x
print(r)
# AttributeError: can't set attribute

Oui, j'ai ʻAttributeError: can't set attribute`. Donc, je voudrais d'abord présenter une solution.

practice03.py


class C(object):
    def __init__(self) -> None:
        self._x = 1

    @property
    def x(self):
        if self._x is None:
            return None
        return self._x


c = C()
r = c.x
print(r)
# 1

Alors pourquoi «practice02.py» ne fonctionne-t-il pas?

C'est parce que le nom de la variable et le nom de la fonction correspondent. En d'autres termes, si vous donnez la variable comme self._x comme practice03.py, c'est sûr car __le nom de la variable et le nom de la fonction sont différents __.

Et en pratique03.py

getter.py


@property
    def x(self):
        if self._x is None:
            return None
        return self._x

Cette partie s'appelle un getter!

Pourquoi utiliser des getters et des setters

Dans le cas d'un article simple comme cet article, je pense qu'il est plus facile à comprendre si vous l'écrivez sans utiliser de getter ou de setter. Je pense qu'il est en fait utilisé lorsque vous voulez traiter une méthode qui existe dans la classe __ comme un attribut __.

Il y a un article très utile, alors je vais y faire référence.

Je ne comprends pas la nécessité de la propriété python3.

Comme vous pouvez le voir dans cet article, les getters et les setters sont probablement l'une des techniques / techniques utilisées lorsque vous souhaitez faciliter la compréhension. ~~ En d'autres termes, c'est une humeur. ~~ Si vous pouvez bien l'utiliser, vous pourrez écrire un code plus propre et plus facile à comprendre! !! Je ferai de mon mieux pour étudier afin que je puisse bien l'utiliser!

Quelqu'un a écrit quelque chose de facile à comprendre dans la section des commentaires, alors jetez-y également un œil!

Puis!

Recommended Posts

J'obtiens un attribut impossible à définir lors de l'utilisation de @property en python
Quand j'obtiens une erreur de pilote chrome dans Selenium
J'obtiens une exception java.util.regex.PatternSyntaxException lors du fractionnement d'une chaîne dans PySpark
J'ai vérifié la vitesse de référence lors de l'utilisation de la liste python, du dictionnaire et du type de jeu.
[Python] Je souhaite obtenir un ensemble commun entre numpy
J'ai créé un lecteur de flux rapide en utilisant feedparser en Python
Une note lors de la création d'un graphe dirigé à l'aide de Graphviz en Python
Discord's Python 1.5 ou version ultérieure, je ne parviens pas à obtenir la liste des membres
J'ai essayé "Comment obtenir une méthode décorée en Python"
J'ai fait un chronomètre en utilisant tkinter avec python
Précautions lors de l'utilisation de Pit avec Python
J'ai fait un Line-bot avec Python!
J'obtiens une KeyError dans pyclustering.xmeans
Scikit-learn ne peut pas être installé en Python
Lors de l'utilisation d'expressions régulières en Python
Lors de l'écriture d'un programme en Python
Quand j'ai essayé de gratter en utilisant des requêtes en python, j'étais accro à SSLError, donc un mémo de contournement
Obtenir l'équilibre Suica en Python (en utilisant libpafe)
J'ai fait un programme de gestion de la paie en Python!
Précautions lors du décapage d'une fonction en python
Ecrire une courte définition de propriété en Python
Comment obtenir stacktrace en python
Obtenez des données Youtube en Python à l'aide de l'API Youtube Data
Scraping de sites Web à l'aide de JavaScript en Python
Je ne peux pas obtenir l'élément dans Selenium!
Obtenez un jeton pour conoha avec python
Dessinez une structure arborescente en Python 3 à l'aide de graphviz
J'ai créé un outil de mot de passe en Python.
Pourquoi ne puis-je pas installer matplotlib avec python! !!
Où dois-je m'arrêter lorsque je définis un point d'arrêt dans une fonction dans GDB (x86)
J'ai créé un bot Discord en Python qui se traduit quand il réagit
Comment obtenir la valeur du magasin de paramètres dans lambda (en utilisant python)
J'obtiens un UnicodeDecodeError en essayant de me connecter à oracle avec python sqlalchemy
Configurez un serveur Web local en 30 secondes en utilisant http.server en python 3
Une note utile lors de l'utilisation de Python après une longue période
J'ai écrit FizzBuzz en python en utilisant la machine à vecteurs de support (bibliothèque LIVSVM).
J'obtiens une erreur lorsque je mets un plug-in Python dans Visual Studio Code sous l'environnement pyenv
Lorsque le codec ne peut pas décoder l'octet apparaît en python
Créer un fichier GIF en utilisant Pillow en Python
[Python] Récupérez les fichiers dans le dossier avec Python
Un mémo que j'ai écrit un tri rapide en Python
Récupérer l'appelant d'une fonction en Python
Je veux créer une fenêtre avec Python
J'ai essayé de jouer à un jeu de frappe avec Python
J'ai écrit une classe en Python3 et Java
Configurez un serveur SMTP de test en Python.
J'obtiens une UnicodeDecodeError lors de l'exécution avec mod_wsgi
Afficher les avis sur les médicaments à l'aide de listes en Python
J'ai essayé de lire un fichier CSV en utilisant Python
Configurer un serveur SMTP simple en Python
J'ai essayé d'ajouter un module Python 3 en C
Touchons une partie de l'apprentissage automatique avec Python
[Question] Que se passe-t-il si vous utilisez% en python?
Créez un fichier MIDI en Python en utilisant pretty_midi
J'ai écrit un analyseur japonais en japonais en utilisant pyparsing.
J'ai créé un programme cryptographique César en Python.
Dans le tutoriel Chainer, j'obtiens une erreur lors de l'importation d'un package. (moquer)
[Python] Choses à vérifier lorsqu'une erreur de décodage Unicode apparaît dans Django
Que faire lorsque l'imitation est intégrée à Python