La méthode _to_string
Fait partie de la section Programmation orientée objet du Journey GDScript de Coddy. Leçon 32 sur 65.
Afficher un objet dont la classe ne définit pas _to_string() ne montre que sa classe et un identifiant interne, qui change d’une exécution à l’autre : <RefCounted#-9223372009541466673>. Définissez _to_string() et renvoyez le texte qui doit apparaître à la place :
# 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 l’appelle chaque fois que l’objet est converti en texte : avec print(), avec str(), avec %s dans une chaîne de formatage, et pour chaque objet d’un Array ou d’un Dictionary affiché :
var card := Card.new("Queen", "hearts")
print(card) # Dame de cœur
print(str(card)) # Dame de cœur
print("You drew %s" % card) # Vous avez tiré la dame de cœur
print([card, Card.new("7", "clubs")]) # [Dame de cœur, 7 de trèfle]"You drew " + card est toujours une erreur, car + concatène deux chaînes et card est un objet. Convertis-le d’abord : "You drew " + str(card).
Une sous-classe peut redéfinir _to_string() et utiliser le texte de la classe parente avec super() :
# wild_card.gd
class_name WildCard
extends Card
func _to_string() -> String:
return "Wild " + super()print(WildCard.new("King", "spades")) affiche Wild King of spades.
_to_string() renvoie le texte et n’affiche rien lui-même. Le code qui utilise l’objet décide si le texte est affiché, intégré à une ligne plus longue ou stocké.
Défi
FacileDonnez à deux classes une méthode _to_string() :
PlayingCarddansplaying_card.gda unrankcompris entre2et14et unsuit. Son texte est le rang,ofet la couleur, par exemple7 of clubs. Les rangs11,12,13et14s’écriventJ,Q,KetA:Q of hearts.Handdanshand.gdconserve ses cartes dans_cards. Son texte estHand (N):suivi des textes des cartes joints avec,, ouHand (0): emptys’il ne contient aucune carte.
Le code fourni affiche la main vide, lit le nombre de cartes, puis une ligne RANK SUIT par carte. Il ajoute chaque carte à la main, affiche Drew et la carte, puis affiche la main. Pour les cartes 7 clubs et 12 hearts, il affiche :
Hand (0): empty
Drew 7 of clubs
Drew Q of hearts
Hand (2): 7 of clubs, Q of heartsVotre code va dans playing_card.gd et hand.gd. main.gd contient le code d’entrée/sortie fourni et ne peut pas être modifié.
Essayez vous-même
extends Node
func _ready():
# Code d'entrée/sortie fourni : conservez-le tel quel
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)
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Programmation orientée objet
1Fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses et objetsLe mot-clé selfMéthodesPropriétésConstructeur (_init)Récapitulatif - Calculatrice simple4Polymorphisme
Retour sur la redéfinition des méthodesTypage canardClasses et méthodes abstraitesConception d’interfacesRécapitulatif – Calculateur de formes7Signaux
Qu’est-ce qu’un signal ?Déclarer et émettreSe connecter aux signauxSignaux avec argumentsRécapitulatif - système de santé10Patrons de conception, partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode modèlePatron ÉtatPatron Composite2Propriétés de classe
Variables d’instance et variables statiquesFonctions statiquesSetters de propriétésGetters de propriétésPrivé par conventionRécapitulatif - Gestionnaire de comptes bancaires5Encapsulation
Membres publics et privésValidation avec les méthodes setterMasquage de l’informationPropriétés en lecture seuleRécapitulatif - Système de dossiers étudiants8Concepts avancés de la POO
Composition ou héritageClasses internesLes nœuds comme composantsRefCounted ou NodeEnums dans les classes3Héritage
Héritage de baseLe mot-clé superRedéfinition de méthodesChaînes d’héritageVérifier les types avec isRécapitulatif – Hiérarchie des employés6Méthodes spéciales
Introduction aux méthodes virtuellesLa méthode _to_stringItérateurs personnalisésRécapitulatif – Liste personnalisée9Patrons de conception, partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron StrategyEntraînez-vous par vous-même : Compilateur GDScript en ligne