Свойства
Часть раздела Объектно-ориентированное программирование путешествия по GDScript на Coddy. Урок 6 из 65.
Переменные, объявленные в классе, — это его свойства (также называемые переменными-членами): данные, которые хранит каждый объект. Объявляй их в начале класса, указывая для каждой тип и начальное значение:
# player.gd
class_name Player
extends RefCounted
var player_name: String = "Hero"
var level: int = 1
var hp: float = 100.0
var inventory: Array[String] = []Свойство, объявленное без значения, по умолчанию получает значение своего типа: 0 для int, "" для String, false для bool и пустой массив для Array[String].
Вне класса вы читаете и изменяете свойство с помощью точки. Внутри методов класса вы используете его имя:
var p := Player.new()
p.level += 1
p.inventory.append("sword")
print(p.level) # 2
print(p.inventory) # ["sword"]Каждый объект получает собственную копию каждого свойства, включая массивы: [] создаёт новый пустой массив для каждого игрока, поэтому инвентарь другого игрока остаётся пустым.
Тип проверяется: p.level = "max" — это ошибка, о которой сообщается до запуска программы, потому что level содержит значение типа int.
Задание
ЛегкоЗаверши класс Player в player.gd. Объяви следующие свойства:
player_name—String, исходное значение которого —"Hero"level—int, исходное значение которого —1hp—int, исходное значение которого —100inventory—Array[String], изначально пустой
Затем заверши метод describe(). Он возвращает NAME (level LEVEL, HP hp): ITEMS, где ITEMS — это элементы инвентаря, соединённые с помощью ", ", или no items, если инвентарь пуст.
Предоставленный код считывает имя одного игрока, затем количество последующих команд и сами команды: hit AMOUNT, item NAME или level. Он напрямую изменяет свойства игрока и в конце выводит результат describe() для этого игрока и для второго игрока, которого он не изменял. Для Ada и команд hit 30, item sword, level и item shield он выводит:
Ada (level 2, 70 hp): sword, shield
Hero (level 1, 100 hp): no itemsТвой код должен находиться в player.gd. В main.gd находится предоставленный код ввода/вывода, который нельзя редактировать.
Попробуйте сами
extends Node
func _ready():
# Предоставленный код ввода-вывода: оставьте его без изменений
var hero := Player.new()
hero.player_name = OS.read_string_from_stdin()
var guest := Player.new()
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
match parts[0]:
"hit":
hero.hp -= int(parts[1])
"item":
hero.inventory.append(parts[1])
"level":
hero.level += 1
print(hero.describe())
print(guest.describe())
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыКлючевое слово selfМетодыСвойстваКонструктор (_init)Повторение: простой калькулятор4Полиморфизм
Переопределение методов: повторениеУтиная типизацияАбстрактные классы и методыПроектирование интерфейсовПовторение — калькулятор фигур7Сигналы
Что такое сигнал?Объявление и отправкаПодключение к сигналамСигналы с аргументамиПовторение — система здоровья10Паттерны проектирования. Часть 2
Паттерн «Команда»Паттерн «Адаптер»Паттерн «Декоратор»Паттерн «Шаблонный метод»Паттерн «Состояние»Паттерн «Компоновщик»2Свойства классов
Переменные экземпляра и классаСтатические функцииСеттеры свойствГеттеры свойствПриватность по соглашениюПовторение — менеджер банковского счёта5Инкапсуляция
Открытые и закрытые членыПроверка данных с помощью сеттеровСокрытие информацииСвойства только для чтенияПовторение — система учета студентов8Продвинутые концепции ООП
Композиция и наследованиеВнутренние классыУзлы как компонентыRefCounted и NodeПеречисления в классах11Проект: Управление библиотекой
Обзор проектаКлассы книг и пользователей3Наследование
Основы наследованияКлючевое слово superПереопределение методовЦепочки наследованияПроверка типов с помощью isПовторение — иерархия сотрудников6Специальные методы
Введение в виртуальные методыМетод _to_stringПользовательские итераторыПовторение: пользовательский список9Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн «Одиночка»Паттерн «Фабрика»Паттерн «Наблюдатель»Паттерн «Стратегия»Потренируйтесь самостоятельно: Онлайн-компилятор GDScript