Dies und das von Python-Eigenschaften

Einführung

Ich habe die "Eigenschaft" von Python nicht verstanden, also Ich möchte zusammenfassen, was ich recherchiert habe.

Was ist überhaupt eine Immobilie?

[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)

Ich möchte Werte gut verwalten, aber ich möchte auch auf natürliche Weise wie Instanzvariablen auf Werte zugreifen können. "Eigenschaften" ist das Beste aus beiden Welten.

Ist geschrieben. Der Punkt ist, dass Sie den Wert von außen nicht einfach ändern können, und Sie sollten denken, dass er nützlich ist, wenn Sie ihn einfach herausnehmen möchten.


def Eigenschaftsname(self):
wird bearbeitet

'Definieren Sie eine Methode zum Abrufen des Werts einer Eigenschaft'
@property
def Eigenschaftsname(self):
Rückgabewert
  
'Legen Sie den Wert der Eigenschaft fest'
@Name des Anwesens.setter
def Eigenschaftsname (self, value)
Verarbeitung zum Einstellen des Wertes

Eigenschaften werden so definiert.


@property

Wenn Sie es sehen, denken Sie bitte "Hallo! Ich bin gekommen!".

Was sind Instanzvariablen?

Eigenschaften beziehen sich auf Instanzvariablen, daher werden wir hier Instanzvariablen diskutieren. Instanzvariablen sind Variablen, die unabhängig für jede Instanz existieren, die beim Ausführen der Klasse erstellt wird. Es ist ein bisschen schwierig, nicht wahr?


def __init__(self, message):
    self.message = message #Instanzvariablennachricht

Diese "self.message" ist eine Instanzvariable. Schauen wir uns als nächstes die allgemeine Definition und Bewegung an.

#Instanzvariable

class MyClass:
    def __init__(self, message):  #Initialisierung: Wird beim Erstellen einer Instanz automatisch aufgerufen
        self.message = message    #Deklarieren Sie die Instanzvariablennachricht

    def print_message(self):  #Eine Funktion, die den Wert der Instanzvariablennachricht anzeigt
        print(self.message)  #Greifen Sie auf die Instanzvariablennachricht zu und zeigen Sie sie an


instance = MyClass("instance")  #Instanz erstellen
python = MyClass("python")  #Erstellen Sie eine Instanzpython

print(instance.message)  #wird als Instanz angezeigt
print(python.message)  #Wird als Python angezeigt

instance.print_message()  #wird als Instanz angezeigt
python.print_message()  #Wird als Python angezeigt

instance.message = 'Python' #self.Ändern Sie den Inhalt der Nachricht in "Python".
print(instance.message)  #Wird als Python angezeigt=Was zuvor als "Instanz" angezeigt wurde, wurde geändert

Wie Sie im obigen Code sehen können, können Sie den Wert leicht abrufen, aber leicht ändern. Wenn Sie Änderungen leicht vornehmen können, treten unerwartete Dinge wie Fehler auf. Wie ich bereits sagte, sind Eigenschaften Dinge, die mit einer guten Verwaltung von Änderungen leicht abgerufen werden können.

Lassen Sie uns Ihr Verständnis anhand der Anwendungsbeispiele vertiefen.

Beispiel für die Nutzung von Immobilien


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 = ''     #Ändern Sie den Inhalt der Nachricht von "Hallo" in eine leere Zeichenfolge ③
print(pc)           # Hello  ④
pc.message = 'Bye!' #Ändern Sie den Inhalt der Nachricht von "Hallo" in "Tschüss".!⑤
print(pc)       #Bye!   ⑥

Übergeben Sie "Hallo" als Argument in ① und der Inhalt von "self.message" wird zu "Hallo". (2) Wenn die Nachrichtenmethode aufgerufen wird, wird "Hallo" als Rückgabewert zurückgegeben. (3) Der Wert von "message" wurde in eine leere Zeichenfolge geändert. ④ Sie sollten es in empty in eine leere Zeichenfolge ändern, aber "Hallo" wird wieder angezeigt. Ich wundere mich warum? Wenn Sie einen neuen Wert festlegen, wird die Prozedur zuerst unter "@ message.setter" ausgeführt.


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

Dieses Mal sage ich, dass ich Änderungen akzeptieren werde, wenn es sich nicht um eine leere Zeichenfolge wie diese handelt. Daher wurde die leere Zeichenfolge abgelehnt und "Hallo" angezeigt. ⑤ Ich werde versuchen, das nächste Mal ohne Disziplin zu "Bye!" Zu wechseln. ⑥ Diesmal ist es keine leere Zeichenfolge, daher war die Änderung zulässig.

Auch dieses Mal wird von außen nicht direkt als "message" darauf zugegriffen. Bitte beachten Sie, dass Elemente mit zwei _ wie "" von außen nicht zugänglich sind.

Der Punkt ist, dass Sie einen neuen Wert wie diesen so steuern können, dass unerwartete Dinge nicht eintreten.

Ich denke, Sie können die allgemeine Bewegung in diesem Kapitel verstehen. Schauen wir uns das nächste Kapitel genauer an.

Eigenschafts- und Setterbewegung

Lassen Sie uns unser Verständnis vertiefen, indem wir überprüfen, wie das Teil mit Eigenschaft und Setter aufgerufen wird.


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') #Übergeben Sie "Hallo" als Argument ①
print(mc.name)     #'Hello'Angezeigt als+ 'inside the getter'Wird als ② angezeigt
mc.name = 'Python'    #Der Wert'Python'ändern+ 'inside the setter'③
print(mc.name)        #'Python'Angezeigt als+ 'inside the getter'Wird als ④ angezeigt

Wie Sie an der Tatsache sehen können, dass "in the getter" in ② angezeigt wird, können Sie sehen, dass "@ prperty" aufgerufen wird. Wenn Sie dagegen den Wert in ③ ändern, wird '@ name.setter' als 'in the setter' bezeichnet. Infolgedessen wird der Wert normalerweise in ④ geändert.

Wie Sie sehen können, wird beim Aufrufen eines Werts '@ property' und beim Ändern eines Werts '@ 〇〇.setter' aufgerufen. Und Sie können den Wert mit setter'to begrenzen, um zu verhindern, dass unerwartete Werte eingegeben werden. Wie Sie vielleicht bemerkt haben, ist es einfach anzurufen, da Sie am Ende des Anrufs kein '()' benötigen.

Schließlich

Diesmal haben wir über Eigenschaften erklärt. Ich frage mich, ob es einfacher zu verstehen ist, wenn Sie erkennen, dass "es einfach ist, den Wert genau aufzurufen und einzustellen". Wir werden die Artikel auch in Zukunft aktualisieren. Wenn Sie Zeit haben, schauen Sie sich bitte auch andere Artikel an.

Recommended Posts

Dies und das von Python-Eigenschaften
Dies und das der Einschlussnotation.
matplotlib dies und das
Dies und das mit reflektieren
Zabbix API dies und das
Quellinstallation und Installation von Python
Umgebungskonstruktion von Python und OpenCV
Die Geschichte von Python und die Geschichte von NaN
Installation von SciPy und matplotlib (Python)
Dies und das haben wir von boost.python gelernt
Koexistenz von Python2 und 3 mit CircleCI (1.0)
Dies und das mit NLTK (Memo)
Zusammenfassung der Python-Indizes und -Slices
Reputation von Python-Büchern und Nachschlagewerken
Überprüfung der Theorie, dass "Python und Swift ziemlich ähnlich sind"
Installation von Visual Studio Code und Installation von Python
Übung, dies in Python zu verwenden (schlecht)
Extraktion von tweet.js (json.loads und eval) (Python)
Verbinde viel Python oder und und
Einfache Einführung in die Python3-Serie und OpenCV3
[Python] Verschiedene Kombinationen von Zeichenketten und Werten
Gleiche Automatisierung des Python- und PyPI-Setups
Vollständiges Verständnis von Python-Threading und Multiprocessing
Projekt Euler # 1 "Vielfaches von 3 und 5" in Python
Python-Grundlagen ①
Grundlagen von Python ①
Kopie von Python
Einführung von Python
Zusammenfassung der Korrespondenz zwischen Ruby- und Python-Array-Operationen
Zusammenfassung der Unterschiede zwischen PHP und Python
Die Antwort von "1/2" unterscheidet sich zwischen Python2 und 3
Ein netter Nimporter, der Nim und Python verbindet
Entwicklung von Spielen, die die Quantität nutzen
Angeben des Bereichs von Ruby- und Python-Arrays
Installation von Python 3 und Flask [Zusammenfassung der Umgebungskonstruktion]
Vergleichen Sie die Geschwindigkeit von Python Append und Map
[Python] Kapitel 02-01 Grundlagen von Python-Programmen (Operationen und Variablen)
Dies ist die einzige grundlegende Überprüfung von Python ~ 1 ~
Dies ist die einzige grundlegende Überprüfung von Python ~ 2 ~
TRIE-Baumimplementierung mit Python und LOUDS
Python-Entwicklungsumgebung - Verwendung von Pyenv und Virtualenv-
Links und Memos von Python-Zeichencodezeichenfolgen
Einfacher Vergleich von Python-Bibliotheken, die Excel betreiben
R- und Python-Schreibvergleich (euklidische Methode der gegenseitigen Teilung)
Dies ist die einzige grundlegende Überprüfung von Python ~ 3 ~
E / A-bezogene Zusammenfassung von Python und Fortan
Liste des zu verschiebenden und zu merkenden Python-Codes
Dies und das ist nützlich, wenn es mit nohup verwendet wird
Ein Liner, der mit Python ein Umfangsverhältnis von 10000 Stellen ausgibt
[Python] Ein grobes Verständnis von Iterablen, Iteratoren und Generatoren
Berücksichtigung der Stärken und Schwächen von Python
Über flache und tiefe Kopien von Python / Ruby
Fortsetzung der Multi-Plattform-Entwicklung mit Electron und Python
Erläuterung der Bearbeitungsentfernung und Implementierung in Python
[Python] Klassentyp und Verwendung des datetime-Moduls
Beispiel für das Lesen und Schreiben von CSV mit Python