Erläuterung der python 'self' Variable zu einem Anfänger [Duplikat]

Diese Frage hat hier schon eine Antwort:

  • Was ist der Selbstzweck? 17 antworten

Ich bin ziemlich unwissend von OOP Jargon und Konzepte. Ich weiß begrifflich, was ein Gegenstand ist, und dass Gegenstände Methoden haben. Ich verstehe sogar, dass in Python, Klassen sind Objekte! Das ist cool, ich weiß einfach nicht was es bedeutet Es klickt nicht mit mir.

Ich versuche derzeit, ein paar ausführliche Antworten zu verstehen, die ich glaube, mein Verständnis von Python zu beleuchten:

  1. Was bedeutet das "Ertrag" Keyword in Python?
  2. Was ist eine Metaklasse in Python?

In der ersten Antwort verwendet der Autor den folgenden Code als Beispiel:

>>> class Bank(): # let's create a bank, building ATMs ... crisis = False ... def create_atm(self) : ... while not self.crisis : ... yield "$100" 

Ich komme nicht sofort, was auf sich self zeigt. Das ist definitiv ein Symptom, dass ich keine Klassen verstehe, an denen ich irgendwann arbeiten werde. Zu klären, in

 >>> def func(): ... for i in range(3): ... print i 

Ich verstehe, dass i auf einen Artikel in der Liste range(3) die, da es in einer Funktion ist, ist nicht global. Aber was bedeutet self "auf"?

  • Was ist der Unterschied zwischen einer Funktion, einer ungebundenen Methode und einer gebundenen Methode?
  • Wie kann ich die Basis- (Super-) Klasse initialisieren?
  • Pythonschliessen + oop
  • Zwei Klassen mit einer strukturell identischen Methode, aber eine anders benannte Variable
  • Anbringen eines Dekorators für alle Funktionen innerhalb einer Klasse
  • UnicodeDecodeError: 'ascii' Codec kann das Byte 0xea nicht in Position 8 decodieren: ordinal nicht im Bereich (128)
  • In Python, wann sind zwei Objekte gleich?
  • Wie ist alles ein Gegenstand?
  • 4 Solutions collect form web for “Erläuterung der python 'self' Variable zu einem Anfänger [Duplikat]”

    Ich werde versuchen, einige Verwirrung über Klassen und Objekte für Sie zuerst zu klären. Lets Blick auf diesen Codeblock:

     >>> class Bank(): # let's create a bank, building ATMs ... crisis = False ... def create_atm(self) : ... while not self.crisis : ... yield "$100" 

    Der Kommentar dort ist ein bisschen trügerisch. Der obige Code "erstellt" keine Bank. Es definiert, was eine Bank ist. Eine Bank ist etwas, das eine Eigenschaft namens crisis , und eine Funktion create_atm . Das ist, was der oben genannte Code sagt.

    Jetzt lasst uns eigentlich eine Bank erstellen:

     >>> x = Bank() 

    Dort ist x jetzt eine Bank. x hat eine Eigenschaft crisis und eine Funktion create_atm . Aufruf von x.create_atm(); In python ist das gleiche wie das Aufrufen von Bank.create_atm(x); , So bezieht sich jetzt self auf x . Wenn Sie eine andere Bank namens y hinzufügen, ruft y.create_atm() den Blick auf y 's Wert der Krise, nicht x ' s seit in dieser Funktion self bezieht sich auf y .

    self ist nur eine Namenskonvention, aber es ist sehr gut, damit zu bleiben. Es ist immer noch wert, dass der oben genannte Code gleichbedeutend ist mit:

     >>> class Bank(): # let's create a bank, building ATMs ... crisis = False ... def create_atm(thisbank) : ... while not thisbank.crisis : ... yield "$100" 

    Es kann Ihnen helfen, an die obj.method(arg1, arg2) als rein syntaktischen Zucker für die method(obj, arg1, arg2) (außer dass die method über den Typ des obj wird und nicht global ist ).

    Wenn man es so betrachtet, ist obj das erste Argument für die Funktion, die traditionell in der Parameterliste selbst benannt wird. (Sie können in der Tat, nennen Sie es etwas anderes, und Ihr Code wird ordnungsgemäß funktionieren, aber andere Python-Kodierer werden bei Ihnen stirnrunzeln.)

    " Self " ist das Instanzobjekt, das automatisch auf die Methode der Klasseninstanz übergeben wird, wenn es aufgerufen wird, um die Instanz zu identifizieren, die es aufgerufen hat. " Self " wird verwendet, um auf andere Attribute oder Methoden des Objekts aus dem Inneren der Methode zuzugreifen. (Methoden sind grundsätzlich nur Funktionen, die zu einer Klasse gehören)

    " Self " muss nicht verwendet werden, wenn eine Methode aufgerufen wird, wenn Sie bereits eine verfügbare Instanz haben.

    Zugriff auf das Attribut "some_attribute" aus einer Methode:

     class MyClass(object): some_attribute = "hello" def some_method(self, some_string): print self.some_attribute + " " + some_string 

    Zugriff auf das Attribut "some_attribute" aus einer vorhandenen Instanz:

     >>> # create the instance >>> inst = MyClass() >>> >>> # accessing the attribute >>> inst.some_attribute "hello" >>> >>> # calling the instance's method >>> inst.some_method("world") # In addition to "world", inst is *automatically* passed here as the first argument to "some_method". hello world >>> 

    Hier ist ein kleiner Code zu zeigen, dass Selbst ist das gleiche wie die Instanz:

     >>> class MyClass(object): >>> def whoami(self, inst): >>> print self is inst >>> >>> local_instance = MyClass() >>> local_instance.whoami(local_instance) True 

    Wie von anderen erwähnt, heißt es " Selbst " durch Konvention, aber es könnte alles genannt werden.

    self bezieht sich auf die aktuelle Instanz der Bank . Wenn du eine neue Bank create_atm auf sie create_atm , wird sich selbst implizit von python übergeben und bezieht sich auf die Bank, die du erstellt hast.

    Python ist die beste Programmiersprache der Welt.