La parola chiave self
Fa parte della sezione Programmazione orientata agli oggetti del percorso GDScript di Coddy. Lezione 4 di 65.
Una funzione dichiarata in una classe viene eseguita su un oggetto specifico: quello che precede il punto nella chiamata. All’interno della funzione, la parola chiave self fa riferimento a quell’oggetto.
# 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() esegue describe() con self impostato su my_car, quindi la funzione legge le variabili di quell’auto. Non passi mai self tu stesso:
var my_car := Car.new()
var taxi := Car.new()
taxi.color = "Yellow"
my_car.describe() # Sono una berlina rossa
taxi.describe() # Sono una berlina giallaScrivere self. è facoltativo. All'interno di una funzione di una classe, color da solo indica già il color dell'oggetto, quindi print("I am a %s %s" % [color, model]) fa la stessa cosa.
Ti serve self quando un parametro ha lo stesso nome di una variabile della classe. All'interno della funzione, il nome indica il parametro e self. seleziona la variabile dell'oggetto:
func repaint(color: String) -> void:
self.color = colorSenza self., la riga color = color copia il parametro su se stesso e l’auto mantiene il suo vecchio colore.
Sfida
FacileCompleta le due funzioni della classe Car in car.gd:
set_info(year, make, model)memorizza i suoi tre parametri nelle variabili dell'auto con gli stessi nomidescribe()restituisceThis car is a YEAR MAKE MODEL, ad esempioThis car is a 2020 Toyota Corolla
Il codice fornito legge quante auto seguono, quindi una riga per ogni auto (year make model). Crea ogni auto, chiama set_info() e stampa describe() per ogni auto. Per la riga 2020 Toyota Corolla stampa:
This car is a 2020 Toyota CorollaIl tuo codice va in car.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 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())
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