Menu
CoddyTech

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 Limousine

Das 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 = color

Ohne self. kopiert die Zeile color = color den Parameter auf sich selbst, und das Auto behält seine alte Farbe.

challenge icon

Aufgabe

Einfach

Vervollstä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 Namen
  • describe() gibt This car is a YEAR MAKE MODEL zurück, zum Beispiel This 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 Corolla

Dein 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())
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-GDScript-Compiler