1338 Stimmen

Was ist der Zweck des Wortes 'self'?

Was ist der Zweck von self in Python? Ich verstehe, dass es sich auf das spezifische Objektinstanz bezieht, die aus dieser Klasse erstellt wurde. Aber warum muss es explizit als Parameter zu jeder Methode hinzugefügt werden?

Zur Veranschaulichung, in Ruby kann ich dies tun:

class MyClass
    def func(name)
        @name = name
    end

In Python muss ich jedoch self einschließen:

class MyClass:
    def func(self, name):
        self.name = name

1voto

prosti Punkte 34344

self ist unvermeidlich.

Es gab gerade eine Frage, ob self implizit oder explizit sein sollte. Guido van Rossum hat diese Frage beantwortet und gesagt self muss bleiben.

Also wo lebt das self?

Wenn wir uns nur auf die funktionale Programmierung beschränken würden, bräuchten wir kein self. Sobald wir zur Python OOP übergehen, finden wir dort self.

Hier ist der typische Anwendungsfall Klasse C mit der Methode m1

class C:
    def m1(self, arg):
        print(self, ' innen')
        pass

ci =C()
print(ci, ' außen')
ci.m1(None)
print(hex(id(ci))) # hex memory address

Dieses Programm wird folgendes ausgeben:

<__main__.C object at 0x000002B9D79C6CC0>  außen
<__main__.C object at 0x000002B9D79C6CC0>  innen
0x2b9d79c6cc0

Also hält self die Speicheradresse der Klasseninstanz. Der Zweck von self wäre, den Verweis für Instanzmethoden zu halten und uns einen expliziten Zugriff auf diesen Verweis zu ermöglichen.


Beachten Sie, dass es drei verschiedene Arten von Klassenmethoden gibt:

  • statische Methoden (lesen: Funktionen),
  • Klassenmethoden,
  • Instanzmethoden (erwähnt).

1voto

PrabhavDevo Punkte 979

Das Wort 'self' bezieht sich auf eine Instanz einer Klasse

class foo:
      def __init__(self, num1, num2):
             self.n1 = num1 #jetzt wird es den Umfang von num1 und num2 in der gesamten Klasse machen
             self.n2 = num2
      def add(self):
             return self.n1 + self.n2 #wenn wir nicht self geschrieben hätten, würde ein Fehler gemeldet werden, dass n1 und n2 nicht definiert sind, und wir müssen self in den Parameter der Funktion aufnehmen, um auf ihre Variablen zuzugreifen

0voto

SilentGhost Punkte 285785

Es handelt sich um einen expliziten Verweis auf die Klasseninstanz.

0voto

laxman Punkte 1312

Vom Dokumente,

Das Besondere an Methoden ist, dass das Instanzobjekt als erstes Argument der Funktion übergeben wird. In unserem Beispiel ist der Aufruf x.f() genau äquivalent zu MyClass.f(x). Im Allgemeinen entspricht der Aufruf einer Methode mit einer Liste von n Argumenten dem Aufruf der entsprechenden Funktion mit einer Argumentliste, die durch Einfügen des Instanzobjekts der Methode vor dem ersten Argument erstellt wird.

vorausgehend dazu der entsprechende Abschnitt,

class MyClass:
    """Ein einfaches Beispiel einer Klasse"""
    i = 12345

    def f(self):
        return 'Hallo Welt'

x = MyClass()

0voto

Rishi Punkte 41

Ich würde sagen, dass in Python zumindest der self-Parameter als Platzhalter betrachtet werden kann. Schau dir das an:

class Person:
  def __init__(self, name, age):
    self.name = name
    self.age = age

p1 = Person("John", 36)

print(p1.name)
print(p1.age)

Self wurde in diesem Fall und in vielen anderen als Methode verwendet, um den Namenwert zu speichern. Danach verwenden wir jedoch das p1, um es der Klasse zuzuweisen, die wir verwenden. Wenn wir es dann ausdrucken, verwenden wir wieder das gleiche Schlüsselwort p1.

Hoffentlich hilft das für Python!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X