Il metodo _to_string
Fa parte della sezione Programmazione orientata agli oggetti del percorso GDScript di Coddy. Lezione 32 di 65.
Stampare un oggetto la cui classe non definisce _to_string() mostra solo la sua classe e un ID interno, che cambia da un'esecuzione all'altra: <RefCounted#-9223372009541466673>. Definisci _to_string() e restituisci il testo che dovrebbe apparire al suo posto:
# card.gd
class_name Card
extends RefCounted
var rank: String
var suit: String
func _init(new_rank: String, new_suit: String) -> void:
rank = new_rank
suit = new_suit
func _to_string() -> String:
return rank + " of " + suitGodot lo chiama ogni volta che l’oggetto viene convertito in testo: con print(), con str(), con %s in una stringa di formato e per ogni oggetto all’interno di un Array o Dictionary stampato:
var card := Card.new("Queen", "hearts")
print(card) # Queen of hearts
print(str(card)) # Queen of hearts
print("You drew %s" % card) # You drew Queen of hearts
print([card, Card.new("7", "clubs")]) # [Queen of hearts, 7 of clubs]"You drew " + card è ancora un errore, perché + concatena due stringhe e card è un oggetto. Convertilo prima: "You drew " + str(card).
Una sottoclasse può eseguire l'override di _to_string() e usare il testo della classe genitore con super():
# wild_card.gd
class_name WildCard
extends Card
func _to_string() -> String:
return "Wild " + super()print(WildCard.new("King", "spades")) stampa Wild King of spades.
_to_string() restituisce il testo e non stampa nulla. È il codice che usa l'oggetto a decidere se stampare il testo, unirlo a una riga più lunga o memorizzarlo.
Sfida
FacileAssegna a due classi un metodo _to_string():
PlayingCardinplaying_card.gdha unrankda2a14e unsuit. Il suo testo è il rango,ofe il seme, ad esempio7 of clubs. I ranghi11,12,13e14si scrivonoJ,Q,KeA:Q of hearts.Handinhand.gdconserva le sue carte in_cards. Il suo testo èHand (N):seguito dai testi delle carte uniti con,, oppureHand (0): emptyquando non contiene carte.
Il codice fornito stampa la mano vuota, legge il numero di carte e poi una riga RANK SUIT per ogni carta. Aggiunge ogni carta alla mano, stampa Drew e la carta, quindi stampa la mano. Per le carte 7 clubs e 12 hearts stampa:
Hand (0): empty
Drew 7 of clubs
Drew Q of hearts
Hand (2): 7 of clubs, Q of heartsIl tuo codice va in playing_card.gd e hand.gd. main.gd contiene il codice di input/output fornito e non può essere modificato.
Provalo tu
extends Node
func _ready():
# Supplied input/output code: keep it as it is
var hand := Hand.new()
print(hand)
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
var card := PlayingCard.new(int(parts[0]), parts[1])
hand.add(card)
print("Drew %s" % card)
print(hand)
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