Bei Verwendung von @property in Python wird ein Attribut nicht festgelegt

Ich bin eine Person, die Code in Python schreibt

Da ich jedoch noch Anfänger bin, langweilen mich Fehler oft. Unter ihnen schreibe ich diesmal mit der Absicht, die Setter und Getter der Klasse, die ich bisher unklar gelassen habe, neu zu lernen. Lass uns gehen!

python 3.7.4

Attribut kann nicht gesetzt werden bleibt hängen

Es gibt Zeiten, in denen Sie das erhalten möchten, was die Klasse generiert hat. Was würden Sie in einem solchen Fall tun?

practice01.py


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


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

Es ist einfach zu schreiben. Aber wenn Sie @property oder so etwas verwenden möchten

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

Ja, ich habe einen AttributeError: Attribut kann nicht gesetzt werden. Daher möchte ich zunächst eine Lösung vorstellen.

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

Warum funktioniert "Practice02.py" nicht?

Dies liegt daran, dass der Variablenname und der Funktionsname übereinstimmen. Mit anderen Worten, wenn Sie die Variable als self._x wie Practice03.py angeben, ist dies sicher, da __ der Variablenname und der Funktionsname unterschiedlich sind __.

Und in der Praxis03.py

getter.py


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

Dieser Teil heißt Getter!

Warum Getter und Setter verwenden?

Bei einem einfachen Artikel wie diesem ist es meiner Meinung nach einfacher zu verstehen, wenn Sie ihn schreiben, ohne einen Getter oder Setter zu verwenden. Ich denke, es wird tatsächlich verwendet, wenn Sie eine Methode, die in der __-Klasse vorhanden ist, wie ein Attribut __ behandeln möchten.

Es gibt einen sehr hilfreichen Artikel, daher werde ich darauf verweisen.

Ich verstehe die Notwendigkeit der python3-Eigenschaft nicht.

Wie Sie diesem Artikel entnehmen können, sind Getter und Setter wahrscheinlich eine der Techniken, die verwendet werden, um das Verständnis zu erleichtern. ~~ Mit anderen Worten, es ist eine Stimmung. ~~ Wenn Sie es gut verwenden können, können Sie saubereren und leichter verständlichen Code schreiben! !! Ich werde mein Bestes geben, um zu lernen, damit ich es gut gebrauchen kann!

Jemand hat im Kommentarbereich etwas leicht verständliches geschrieben, also schauen Sie bitte auch dort nach!

Dann!

Recommended Posts

Bei Verwendung von @property in Python wird ein Attribut nicht festgelegt
Wenn ich einen Chrom-Treiberfehler in Selenium bekomme
Ich erhalte eine java.util.regex.PatternSyntaxException, wenn ich einen String in PySpark teile
Ich habe die Referenzgeschwindigkeit überprüft, wenn ich Python-Liste, Wörterbuch und Set-Typ verwendet habe.
[Python] Ich möchte einen gemeinsamen Satz zwischen numpy erhalten
Ich habe einen schnellen Feed-Reader mit Feedparser in Python erstellt
Ein Hinweis beim Erstellen eines gerichteten Diagramms mit Graphviz in Python
Discords Python 1.5 oder höher, ich kann keine Liste der Mitglieder erhalten
Ich habe versucht "Wie man eine Methode in Python dekoriert"
Ich habe eine Stoppuhr mit tkinter mit Python gemacht
Vorsichtsmaßnahmen bei der Verwendung von Pit mit Python
Ich habe einen Line-Bot mit Python gemacht!
Ich erhalte einen KeyError in pyclustering.xmeans
Scikit-learn kann nicht in Python installiert werden
Bei Verwendung regulärer Ausdrücke in Python
Beim Schreiben eines Programms in Python
Als ich versuchte, mithilfe von Anforderungen in Python zu kratzen, war ich süchtig nach SSLError, also einem Workaround-Memo
Holen Sie sich Suica Balance in Python (mit libpafe)
Ich habe ein Pay-Management-Programm in Python erstellt!
Vorsichtsmaßnahmen beim Beizen einer Funktion in Python
Schreiben Sie eine kurze Eigenschaftsdefinition in Python
Wie bekomme ich Stacktrace in Python?
Holen Sie sich Youtube-Daten in Python mithilfe der Youtube-Daten-API
Scraping von Websites mit JavaScript in Python
Ich kann das Element in Selen nicht bekommen!
Holen Sie sich ein Zeichen für Conoha mit Python
Zeichnen Sie mit graphviz eine Baumstruktur in Python 3
Ich habe ein Passwort-Tool in Python erstellt.
Warum kann ich matplotlib nicht mit Python installieren? !!
Wo höre ich auf, wenn ich in einer Funktion in GDB (x86) einen Haltepunkt setze?
Ich habe in Python einen Discord-Bot erstellt, der übersetzt, wenn er reagiert
So erhalten Sie den Wert aus dem Parameterspeicher in Lambda (mit Python)
Ich erhalte einen UnicodeDecodeError, wenn ich versuche, mit Python sqlalchemy eine Verbindung zu Oracle herzustellen
Richten Sie mit http.server in Python 3 in 30 Sekunden einen lokalen Webserver ein
Ein nützlicher Hinweis, wenn Sie Python nach langer Zeit verwenden
Ich habe FizzBuzz in Python mit der Support Vector Machine (Bibliothek LIVSVM) geschrieben.
Ich erhalte eine Fehlermeldung, wenn ich ein Python-Plug-In in Visual Studio Code in die pyenv-Umgebung einfüge
Wenn der Codec das Byte nicht dekodieren kann, wird es in Python angezeigt
Erstellen Sie eine GIF-Datei mit Pillow in Python
[Python] Holen Sie sich die Dateien mit Python in den Ordner
Ein Memo, das ich schnell in Python geschrieben habe
Holen Sie sich den Aufrufer einer Funktion in Python
Ich möchte mit Python ein Fenster erstellen
Ich habe versucht, mit Python ein Tippspiel zu spielen
Ich habe eine Klasse in Python3 und Java geschrieben
Richten Sie einen Test-SMTP-Server in Python ein.
Ich erhalte einen UnicodeDecodeError, wenn ich mit mod_wsgi laufe
Anzeigen von Arzneimittelbewertungen mithilfe von Listen in Python
Ich habe versucht, eine CSV-Datei mit Python zu lesen
Richten Sie einen einfachen SMTP-Server in Python ein
Ich habe versucht, ein Python 3-Modul in C hinzuzufügen
Lassen Sie uns einen Teil des maschinellen Lernens mit Python berühren
[Frage] Was passiert, wenn Sie% in Python verwenden?
Erstellen Sie eine MIDI-Datei in Python mit pretty_midi
Ich habe einen japanischen Parser auf Japanisch mit Pyparsing geschrieben.
Ich habe ein Caesar-Kryptografieprogramm in Python erstellt.
Im Chainer-Tutorial wird beim Importieren eines Pakets eine Fehlermeldung angezeigt. (spotten)
[Python] Dinge, die überprüft werden müssen, wenn in Django ein Unicode-Dekodierungsfehler auftritt
Was beim Nachahmen zu tun ist, wird in Python eingebettet