Ich habe die "Eigenschaft" von Python nicht verstanden, also Ich möchte zusammenfassen, was ich recherchiert habe.
[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!".
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.
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.
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.
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