Menu
CoddyTech

Ключевое слово self

Часть раздела Объектно-ориентированное программирование путешествия по GDScript на Coddy. Урок 4 из 65.

Функция, объявленная в классе, выполняется для конкретного объекта: того, который стоит перед точкой при вызове. Внутри функции ключевое слово self ссылается на этот объект.

# 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() запускает describe(), установив self в my_car, поэтому функция читает переменные этой машины. Передавать self самостоятельно не нужно:

var my_car := Car.new()
var taxi := Car.new()
taxi.color = "Yellow"
my_car.describe() # Я красный седан
taxi.describe() # Я жёлтый седан

Писать self. необязательно. Внутри функции класса color само по себе уже означает color объекта, поэтому print("I am a %s %s" % [color, model]) делает то же самое.

Тебе нужен self, когда параметр имеет то же имя, что и переменная класса. Внутри функции это имя обозначает параметр, а self. указывает на переменную объекта:

func repaint(color: String) -> void:
	self.color = color

Без self. строка color = color копирует параметр сам в себя, и автомобиль сохраняет свой прежний цвет.

challenge icon

Задание

Легко

Заверши две функции класса Car в файле car.gd:

  • set_info(year, make, model) сохраняет три параметра в переменных автомобиля с такими же именами
  • describe() возвращает This car is a YEAR MAKE MODEL, например This car is a 2020 Toyota Corolla

Предоставленный код считывает количество следующих автомобилей, а затем по одной строке для каждого автомобиля (year make model). Он создаёт каждый автомобиль, вызывает set_info() и выводит результат describe() для каждого автомобиля. Для строки 2020 Toyota Corolla он выводит:

This car is a 2020 Toyota Corolla

Твой код нужно поместить в car.gd. В main.gd находится предоставленный код ввода/вывода, который нельзя редактировать.

Попробуйте сами

extends Node

func _ready():
	# Предоставленный код ввода-вывода: оставьте его без изменений
	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 iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор GDScript