Costruttore (_init)
Fa parte della sezione Programmazione orientata agli oggetti del percorso GDScript di Coddy. Lezione 7 di 65.
Impostare ogni proprietà dopo new() richiede diverse righe ed è facile dimenticarne una. Un costruttore configura un oggetto al momento della sua creazione. In GDScript il costruttore è il metodo _init():
# book.gd
class_name Book
extends RefCounted
var title: String
var author: String
var pages: int
func _init(book_title: String, book_author: String, page_count: int) -> void:
title = book_title
author = book_author
pages = page_countGli argomenti che passi a new() vengono passati a _init(), che viene eseguito automaticamente prima che new() restituisca l'oggetto:
var dune := Book.new("Dune", "Frank Herbert", 412)
print(dune.title) # Dune
print(dune.pages) # 412Quando _init() ha parametri, new() deve passarli: Book.new() senza argomenti è un errore segnalato prima che il programma venga eseguito. Un parametro con un valore predefinito è facoltativo:
func _init(book_title: String, book_author: String = "Unknown") -> void:Con questo costruttore, Book.new("Notes") crea un libro il cui autore è "Unknown".
I nomi dei parametri sopra differiscono dai nomi delle proprietà. Se fossero uguali, scriveresti self.title = title, come nella lezione su self.
Sfida
FacileCompleta la classe Book in book.gd:
- il costruttore
_init(book_title, book_author, page_count)memorizza i suoi argomenti nelle proprietàtitle,authorepages describe()restituisce'TITLE' by AUTHOR, PAGES pages, con il titolo tra apici singoli
Il codice fornito legge quanti libri seguono, poi una riga per ogni libro con il titolo, l'autore e il numero di pagine separati da ;. Crea ogni libro con Book.new(), stampa describe() e infine stampa il totale delle proprietà pages. Per la riga Dune;Frank Herbert;412 stampa:
'Dune' by Frank Herbert, 412 pages
Total pages: 412Il tuo codice va in book.gd. main.gd contiene il codice di input/output fornito e non può essere modificato.
Provalo tu
extends Node
func _ready():
# Codice di input/output fornito: lascialo così com'è
var count := int(OS.read_string_from_stdin())
var total := 0
for i in count:
var parts := OS.read_string_from_stdin().split(";")
var book := Book.new(parts[0], parts[1], int(parts[2]))
print(book.describe())
total += book.pages
print("Total pages: %d" % total)
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione orientata agli oggetti
File esterniIntroduzione alla programmazione orientata agli oggettiClassi e oggetti a confrontoLa parola chiave selfMetodiProprietàCostruttore (_init)Riepilogo - Calcolatrice semplice4Polimorfismo
Ripasso dell'override dei metodiDuck typingClassi e metodi astrattiProgettazione delle interfacceRiepilogo - Calcolatore di forme7Segnali
Che cos'è un segnale?Dichiarare ed emettereCollegarsi ai segnaliSegnali con argomentiRipasso - Sistema della salute10Pattern di progettazione, parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern Composite2Proprietà delle classi
Variabili di istanza e staticheFunzioni staticheSetter delle proprietàGetter delle proprietàPrivato per convenzioneRiepilogo - Gestore di conti bancari5Incapsulamento
Membri pubblici e privatiValidazione con i setterNascondimento delle informazioniProprietà di sola letturaRiepilogo - Sistema di gestione dei dati degli studenti8Concetti avanzati di OOP
Composizione vs ereditarietàClassi interneNodi come componentiRefCounted vs NodeEnum nelle classi11Progetto: Gestione della biblioteca
Panoramica del progettoClassi Libro e Utente3Ereditarietà
Ereditarietà di baseLa parola chiave superOverride dei metodiCatene di ereditarietàControlli di tipo con isRipasso - Gerarchia dei dipendenti6Metodi speciali
Introduzione ai metodi virtualiIl metodo _to_stringIteratori personalizzatiRiepilogo - Lista personalizzata9Modelli di progettazione, parte 1
Introduzione ai modelli di progettazionePattern SingletonPattern FactoryPattern ObserverPattern StrategyEsercitati da solo: Compilatore GDScript online