Also habe ich gerade erst angefangen, in Python zu programmieren, und ich verstehe nicht die ganze Begründung für "Selbst". Ich verstehe, dass es fast wie eine globale Variable verwendet wird, so dass Daten zwischen verschiedenen Methoden in der Klasse übergeben werden können. Ich verstehe nicht, warum Sie es verwenden müssen, wenn Sie eine andere Methode in derselben Klasse aufrufen. Wenn ich bereits in dieser Klasse bin, warum muss ich es dann sagen?
beispiel, wenn ich Folgendes habe: Warum brauche ich selbst alles ()?
class bla:
def hello(self):
self.thing()
def thing(self):
print "hello"
Sie können auch Methoden in der Klasse static
erstellen, sodass self
nicht erforderlich ist. Verwenden Sie dies jedoch, wenn Sie das wirklich brauchen.
Deine:
class bla:
def hello(self):
self.thing()
def thing(self):
print "hello"
statische Ausgabe:
class bla:
@staticmethod
def hello():
bla.thing()
@staticmethod
def thing():
print "hello"
Ein Grund besteht darin, auf die Methode der Instanz der Klasse besondere zu verweisen, in der der Code ausgeführt wird.
Dieses Beispiel kann helfen:
def hello():
print "global hello"
class bla:
def hello(self):
self.thing()
hello()
def thing(self):
print "hello"
b = bla()
b.hello()
>>> hello
global hello
Sie können sich das vorläufig als Namensraumauflösung vorstellen.
Die kurze Antwort lautet "weil Sie def thing(args)
als globale Funktion oder als Methode einer anderen Klasse verwenden können. Nehmen Sie dieses (schreckliche) Beispiel:
def thing(args):
print "Please don't do this."
class foo:
def thing(self,args):
print "No, really. Don't ever do this."
class bar:
def thing(self,args):
print "This is completely unrelated."
Das ist schlecht. Tu das nicht. Wenn Sie aber könnten, könnten Sie thing(args)
und aufrufen, damit etwas passiert. Dies kann möglicherweise eine gute Sache sein, wenn Sie entsprechend planen:
class Person:
def bio(self):
print "I'm a person!"
class Student(Person):
def bio(self):
Person.bio(self)
print "I'm studying %s" % self.major
Der obige Code macht es so, dass, wenn Sie ein Objekt der Student
-Klasse erstellen und bio
aufrufen, es all das tut, was geschehen wäre, wenn es sich bei der Person
-Klasse um eine eigene bio
handelt, die und heißt hinterher sein eigenes Ding machen.
Dies wird in die Vererbung und einige andere Dinge, die Sie vielleicht noch nicht gesehen haben, aber freuen uns darauf.
Für mich selbst wie ein Bereichsdefinierer, wobei self.foo () und self.bar die Funktion und den in der Klasse definierten Parameter angeben und nicht die Definitionen an den anderen Stellen.
Möglicherweise gibt es eine andere Funktion mit demselben Namen außerhalb Ihrer Klasse. self
ist eine Objektreferenz auf das Objekt selbst, daher sind sie gleich. Python -Methoden werden nicht im Kontext des Objekts selbst aufgerufen. self
in Python kann verwendet werden, um mit benutzerdefinierten Objektmodellen oder Ähnlichem umzugehen.
Eine Spiegelung spiegelt den Unterschied zwischen Java und Python wider: Java könnte Methoden innerhalb von class ohne self verwenden, da der Aufruf einer Methode nur über class oder obj möglich ist, sodass der Weg zum Compiler frei ist. Dies kann zwar den Übersetzer von Python verwirren und benötigt viel Zeit, um die Symboltabelle über den gesamten Namensraum zur Laufzeit nachzuschlagen, da sowohl die Funktionsmethode als auch die Klassenmethode die potenziellen Kandidaten für einen Funktionsaufruf sind, wenn 'self' nicht verwendet wird. Wenn diese Methode verwendet wird, würde sich die Python-Geschwindigkeit im Vergleich zu C und Java erneut verlangsamen, was die Attraktivität beeinträchtigen könnte.