Wenn ich eine Klasse studiere, denke ich, ist die erste enorme Barriere ** warum sollte ich "Selbst" als Methodenargument verwenden?
Ich denke, dass es oft davon überzeugt ist, dass es eine Regel ist, also lasst es uns einfügen, aber ich denke, dass es nicht für Anfänger überzeugend ist, die die Struktur fest verstehen und weitermachen wollen.
Ich selbst habe gerade angefangen, Python zu lernen, aber ich habe endlich aufgehört zu lernen, wie man Selt benutzt. Das liegt daran, dass ich dachte: „Sag mir, warum du es benutzt!“ Und ich möchte nicht damit weitermachen, dass es launisch ist.
Wahrscheinlich ist es eine Regel, daher denke ich nicht, dass es zu schwierig sein wird, fortzufahren, aber ich möchte es trotzdem richtig verstehen, also habe ich die Lerninhalte zusammengefasst. Ich bin auch einer der Anfänger, deshalb habe ich versucht, die Beschreibung so weit wie möglich zu machen, damit die Anfänger sie verstehen können.
Für diese Studie war die Erklärung von dieser Site am überzeugendsten, daher habe ich sie als Referenz zusammengefasst.
Zuerst dachte ich, dass ich kein Selbst brauche, also schrieb ich die Quelle, ohne mich selbst zu benutzen.
class Person:
def __init__(name):
p_name = name
def introduce():
print("ich" + p_name + "ist.")
player = Person("Taro")
player.introduce()
① Übergeben Sie das Argument "Taro" an die Klasse, wenn Sie die Instanz "player" erstellen. (2) "Taro" wird vom Konstruktor der Variablen p_name zugewiesen (Initialisierung / Verarbeitung in init). ③ Die Methode Introduce gibt "I am Taro" aus (sollte)
Wenn Sie dies versuchen, ist das Ergebnis:
Traceback (most recent call last):
File "Main.py", line 25, in <module>
player = Person("Taro")
TypeError: __init__() takes 1 positional argument but 2 were given
(Exit status: 1)
Der Prozess scheint nicht falsch zu sein, aber aus irgendeinem Grund erhalte ich eine Fehlermeldung. .. ..
Spieler = Person (" Taro ")
Es scheint, dass ein Fehler bei der Verarbeitung von aufgetreten ist. Sie sollten die Argumente ordnungsgemäß an die Klasse übergeben haben.
** Wenn Sie sich jedoch die Fehlermeldung hier ansehen, werden Sie sie interessant finden. ** ** **
TypeError: __init__() takes 1 positional argument but 2 were given
Was bedeutet das? ** "Die init-Methode kann nur eine Variable annehmen. Warum geben Sie zwei an?" ** Es wurde gesagt, dass.
Nein, Sie haben nur eine Variable, oder? Worüber redest du? Ist es ein Python-Fehler?
Schreiben Sie andererseits den Code gemäß den "Regeln" neu und führen Sie ihn aus.
class Person:
def __init__(self,name):
self.name = name
def introduce(self):
print("ich" + self.name + "ist.")
player = Person("Taro")
player.introduce()
Wenn ich das versuche.
Ich bin Taro
Es scheint, dass es korrekt ausgegeben wird. Der Unterschied zwischen den beiden Codes besteht darin, ob Sie self einschließen oder nicht, aber wenn Sie self einschließen, funktioniert dies ordnungsgemäß. Ich bin mir immer noch nicht sicher. Bitte lesen Sie diese Site, um herauszufinden, warum die Verarbeitung so unterschiedlich ist. Denken.
Bei der Verarbeitung des Codes, der sich nicht früher selbst angibt
TypeError: __init__() takes 1 positional argument but 2 were given
Ich habe den Fehler bekommen, aber was bedeutete das?
** "Die init-Methode kann nur ein Argument annehmen. Warum geben Sie zwei an?" **
Es war das. Mit anderen Worten, wenn Sie das Gegenteil davon zurückgeben,
** "Wenn es zwei Argumente der init-Methode gibt, kann sie problemlos verarbeitet werden" **
Mit anderen Worten, in der Spezifikationsmethode von "Spieler = Person (" Taro ")" werden tatsächlich zwei Argumente angegeben, aber in der Init-Funktion wird nur ein Argument, "Name", angegeben. Daher ist ein Fehler aufgetreten.
Der Schlüssel zum Selbstverständnis ist, dass Sie, wenn Sie "player = Person (" Taro ")" angeben, ** eine weitere versteckte Variable ** übergeben.
Das bedeutet, dass Sie in der Beschreibung der Init-Funktion "def __init __ (nazo, name)" angeben sollten. Es gibt ein mysteriöses Argument, das ich nicht gut verstehe. Versuchen Sie also, das Argument "nazo" anzugeben.
class Person:
def __init__(nazo,name):
nazo.name = name
def introduce(nazo):
print("ich" + nazo.name + "ist.")
player = Person("Taro")
player.introduce()
Wenn ich das versuche.
Ich bin Taro
Das?
Es ist nicht ich selbst, aber es ist vergangen. Ja, es sieht so aus, als müsste es nicht ** selbst ** sein.
Was wir bisher gelernt haben, ist, dass es ein mysteriöses Argument gibt und dass es durch Eingabe des mysteriösen Arguments verarbeitet werden kann. Und das Argument muss nicht selbst sein.
Es roch, als könnte ich es bald erreichen.
Betrachten Sie als Beispiel eine Funktion, die die Buchstaben "Python" groß schreibt. Die zu großschreibende Funktion befindet sich in der Klasse str (eine ursprünglich in Python vorbereitete Klasse) und kann mithilfe der oberen Funktion verarbeitet werden.
Die obere Funktion ist in der Klasse als "def Upper (Objekt):" definiert und kann als str.upper (Objekt) aufgerufen werden.
string = "python"
print(str.upper(string))
Wenn Sie dies tun, erhalten Sie die Ausgabe "PYTHON".
Mit einer solchen Beschreibung würde jedoch niemand in Großbuchstaben konvertieren. Vielleicht würden viele solchen Code für den Kapitalisierungsprozess schreiben.
string = "python"
print(string.upper())
Wenn Sie dies tun, erhalten Sie immer noch die Ausgabe "PYTHON".
Laut der Erklärung von hier scheint die Beschreibung ** string.upper (string) in Python schwer zu sehen zu sein. Sie können das String-Argument weglassen, aber hinter den Kulissen nehmen wir an, dass das Argument richtig verstanden wird **.
Was nun das ausgelassene Argument ist, ist die Zeichenfolge selbst, dh "Ich = Selbst".
Der Punkt ist, dass Sie die Argumente des Objekts weglassen können, wenn Sie die Methode aus dem ** Objekt verwenden. Es ist jedoch in Ordnung, es wegzulassen, und ich werde es heimlich als Argument hinter den Kulissen verstehen! Es scheint, dass Python eine Regel von ** hat.
Was ich sagen möchte ist ** Wenn die zuvor erstellte Player-Instanz die Methode Introduce verwendet, sollte sie als "player.introduce (player)" geschrieben werden, aber das Argument player wird weggelassen. Dann können Sie player.introduce ()
schreiben. Stattdessen bedeutet dies, dass es in der Beschreibung weggelassen wird und das Argument selbst nicht verschwunden ist, sodass die Klasse das Argument ohne Erlaubnis als "Selbst" erhält **.
Das heißt, wenn Sie die init-Methode verwenden (sie wird willkürlich ausgeführt, weil sie ein Konstruktor ist), sollte sie, wenn Sie sie der Einfachheit halber beschreiben, ** player.init (player," Taro ") sein. Es muss
** sein, kann aber auf die gleiche Weise weggelassen werden, sodass Sie auf der Instanzseite player = Person ("Taro")
schreiben können. Stattdessen muss die Klasse das ausgelassene Argument erhalten, daher muss die Klasse "self" als Argument festlegen.
Schauen wir uns auf dieser Grundlage noch einmal die Person-Klasse an.
class Person:
def __init__(nazo,name):
nazo.name = name
def introduce(nazo):
print("ich" + nazo.name + "ist.")
player = Person("Taro")
player.introduce()
Was Sie aus diesem Quellcode sagen können, ist ** Möchten Sie die init-Methode der Person-Klasse verwenden? Dann können Sie das Argument "Sie (Selbst)" weglassen, aber da es nur weggelassen werden darf, erhält die Klasse das Argument (Selbst) richtig **.
Ich denke, ein leicht verständliches Beispiel ist "Python Class Shop erlaubt Gesichtspfade für Instanzen".
Wenn eine Instanz namens "Spieler" einen Klassenladen betritt, müssten Sie normalerweise Ihren Namen in die Liste schreiben, aber dort steht: "Sie sind eine vertraute Person, damit Sie Ihren Gesichtsausweis verwenden können!" .. Als Klassengeschäft möchte ich jedoch erwähnen, dass der Spieler für das Verkaufsmanagement gekommen ist. ``
Ich habe endlich die Antwort bekommen, ** self ist die Instanz selbst **. Normalerweise müssen Sie den Namen (Spieler) richtig angeben, um ihn verwenden zu können. Da jedoch ein Gesichtsausweis zulässig ist, müssen Sie ihn nicht einzeln schreiben. Ich möchte jedoch, dass Sie es als echte Regel schreiben, sodass in der Klasse self als Argument festgelegt wird.
Zum Schluss möchte ich den Quellcode noch einmal überprüfen. Ich habe früher "nazo" geschrieben, aber da die Instanz selbst das Argument ist, ist "self" vorzuziehen.
class Person:
#Wenn Sie die Init-Funktion verwenden möchten, können Sie den Gesichtspfad verwenden, aber ich werde den Namen hier schreiben.
#Wenn Sie dies nicht tun, werden Sie nicht wissen, wer Sie sind.
def __init__(self,name):
#"Sie(self)von"Ich werde den Namen hier schreiben.
self.name = name
#Es ist ein Face Pass, also kannst du ihn ohne Erlaubnis benutzen, aber ich weiß nicht, wer ihn benutzt hat, also schreibe ich meinen Namen hier.
def introduce(self):
print("ich" + self.name + "ist.")
player = Person("Taro")
player.introduce()
Es mag schwer zu verstehen sein, weil es ein Anfänger ist, aber ich denke, es ist in Ordnung, wenn Sie sich mit einem solchen Bild daran erinnern. Wenn Sie etwas mehr wissen möchten, [diese Site](https://python.ms/self/#%E7%96%91%E5%95%8F-%E3%81%AA%E3%82%93%E3 % 81% A7% E6% 98% 8E% E7% A4% BA% E7% 9A% 84% E3% 81% AB-Selbst-% E3% 82% 92% E6% 9B% B8% E3% 81% 8F% E3% 81% AE% EF% BC% 9F) ist gut, aber für Anfänger schwierig, daher scheint es besser, es nach Erreichen des mittleren Niveaus oder höher erneut zu lesen. Ich konnte die Hälfte verstehen, aber ich verstand die Hälfte noch nicht.
Ich hoffe, dass selbst eine Person, die Python lernt, beim Lesen dieses Artikels nicht darüber stolpert.
Recommended Posts