Das Schlüsselwort self
Teil des Abschnitts Objektorientierte Programmierung der GDScript-Journey von Coddy. Lektion 4 von 65.
Eine in einer Klasse deklarierte Funktion wird auf einem bestimmten Objekt ausgeführt: dem Objekt vor dem Punkt im Aufruf. Innerhalb der Funktion verweist das Schlüsselwort self auf dieses Objekt.
# car.gd
class_name Car
extends RefCounted
var color: String = "Red"
var model: String = "Sedan"
func describe() -> void:
print("I am a %s %s" % [self.color, self.model])my_car.describe() führt describe() aus, wobei self auf my_car gesetzt ist. Daher liest die Funktion die Variablen dieses Autos. Du übergibst self nie selbst:
var my_car := Car.new()
var taxi := Car.new()
taxi.color = "Yellow"
my_car.describe() # Ich bin eine rote Limousine
taxi.describe() # Ich bin eine gelbe LimousineDas Schreiben von self. ist optional. Innerhalb einer Klassenfunktion bedeutet color allein bereits die color des Objekts, daher bewirkt print("I am a %s %s" % [color, model]) dasselbe.
Du brauchst self, wenn ein Parameter denselben Namen wie eine Variable der Klasse hat. Innerhalb der Funktion bezeichnet der Name den Parameter, und self. greift auf die Variable des Objekts zu:
func repaint(color: String) -> void:
self.color = colorOhne self. kopiert die Zeile color = color den Parameter auf sich selbst, und das Auto behält seine alte Farbe.
Aufgabe
EinfachVervollständige die beiden Funktionen der Klasse Car in car.gd:
set_info(year, make, model)speichert seine drei Parameter in den Variablen des Autos mit denselben Namendescribe()gibtThis car is a YEAR MAKE MODELzurück, zum BeispielThis car is a 2020 Toyota Corolla
Der bereitgestellte Code liest ein, wie viele Autos folgen, und danach eine Zeile pro Auto (year make model). Er erstellt jedes Auto, ruft set_info() auf und gibt für jedes Auto describe() aus. Für die Zeile 2020 Toyota Corolla gibt er Folgendes aus:
This car is a 2020 Toyota CorollaDein Code gehört in car.gd. main.gd enthält den bereitgestellten Ein-/Ausgabecode und kann nicht bearbeitet werden.
Probier es selbst
extends Node
func _ready():
# Vorgegebener Ein-/Ausgabecode: unverändert lassen
var count := int(OS.read_string_from_stdin())
var cars: Array[Car] = []
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
var car := Car.new()
car.set_info(int(parts[0]), parts[1], parts[2])
cars.append(car)
for car in cars:
print(car.describe())
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas Schlüsselwort selfMethodenEigenschaftenKonstruktor (_init)Wiederholung – Einfacher Taschenrechner4Polymorphie
Methodenüberschreibung erneut betrachtetDuck-TypisierungAbstrakte Klassen und MethodenSchnittstellendesignRückblick – Formrechner2Klassenattribute
Instanz- vs. statische VariablenStatische FunktionenProperty-SetterProperty-GetterPrivat nach KonventionWiederholung – Bankkontenverwaltung5Kapselung
Öffentliche und private MemberValidierung mit SetternInformationsverbergenSchreibgeschützte EigenschaftenRückblick – System zur Schülerverwaltung8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungInnere KlassenNodes als KomponentenRefCounted vs. NodeEnums in Klassen11Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen3Vererbung
Grundlegende VererbungDas Schlüsselwort superMethodenüberschreibungVererbungskettenTypprüfungen mit isWiederholung – Mitarbeiterhierarchie6Spezielle Methoden
Einführung in virtuelle MethodenDie _to_string-MethodeBenutzerdefinierte IteratorenRückblick – Benutzerdefinierte Liste9Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterBeobachter-MusterStrategie-Muster12Abschließende Herausforderungen
E-Learning-PlattformBankensystemEntwicklung von SpielfigurenFahrzeugvermietungÜbe selbstständig: Online-GDScript-Compiler