Menu
CoddyTech

Классы и объекты

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

У класса и его объектов есть разные данные. const в классе принадлежит самому классу: существует одно значение, и его можно прочитать через имя класса, не создавая объект.

# dog.gd
class_name Dog
extends RefCounted

const SPECIES = "Canis familiaris"
var dog_name: String = "Unnamed"
var breed: String = "Unknown"
print(Dog.SPECIES) # Canis familiaris

Строки var описывают, что хранит каждый объект. Каждый объект, созданный с помощью new(), получает собственную копию этих переменных, начиная с их значений по умолчанию:

var dog1 := Dog.new()
var dog2 := Dog.new()
dog1.dog_name = "Nicky"
dog1.breed = "Husky"
print(dog1.dog_name) # Nicky
print(dog2.dog_name) # Unnamed

Изменение dog1 оставляет dog2 без изменений. Объект тоже может прочитать константу: dog1.SPECIES имеет то же значение, что и Dog.SPECIES.

У объекта есть только те переменные, которые объявлены в его классе. dog1.color = "brown" останавливает программу с ошибкой, потому что у Dog нет переменной color. Все переменные, которые нужны объекту, добавляют в класс.

challenge icon

Задание

Легко

Заверши класс Student в файле student.gd:

  • константа SCHOOL со значением "Godot High School", общая для всего класса
  • переменная типа String с именем student_name
  • переменная типа String с именем grade, изначально равная "N/A"

Предоставленный код считывает количество следующих студентов, а затем по одной строке на каждого студента: имя, за которым может следовать пробел и оценка. Для каждой строки он создаёт объект Student, задаёт его имя и задаёт оценку, только если она указана в строке. Затем он выводит Student.SCHOOL и данные каждого студента. Для строк Alice A и Bob он выводит:

School: Godot High School
Alice has grade A
Bob has grade N/A

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

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

extends Node

func _ready():
	# Предоставленный код ввода-вывода: оставьте его без изменений
	var count := int(OS.read_string_from_stdin())
	var students: Array[Student] = []
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ", false)
		var student := Student.new()
		student.student_name = parts[0]
		if parts.size() > 1:
			student.grade = parts[1]
		students.append(student)
	print("School: %s" % Student.SCHOOL)
	for student in students:
		print("%s has grade %s" % [student.student_name, student.grade])
quiz iconПроверьте себя

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

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

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