El método _to_string
Parte de la sección Programación orientada a objetos del Journey de GDScript de Coddy. Lección 32 de 65.
Imprimir un objeto cuya clase no define _to_string() muestra solo su clase y un ID interno, que cambia de una ejecución a otra: <RefCounted#-9223372009541466673>. Define _to_string() y devuelve el texto que debería aparecer en su lugar:
# 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 llama cada vez que el objeto se convierte en texto: con print(), con str(), con %s en una cadena de formato y para cada objeto dentro de un Array o Dictionary impreso:
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 sigue siendo un error, porque + concatena dos cadenas y card es un objeto. Conviértelo primero: "You drew " + str(card).
Una subclase puede sobrescribir _to_string() y usar el texto de la clase padre con super():
# wild_card.gd
class_name WildCard
extends Card
func _to_string() -> String:
return "Wild " + super()print(WildCard.new("King", "spades")) imprime Wild King of spades.
_to_string() devuelve el texto y no imprime nada por sí mismo. El código que usa el objeto decide si se imprime el texto, se une a una línea más larga o se almacena.
Desafío
FácilDa a dos clases un método _to_string():
PlayingCardenplaying_card.gdtiene unrankdel2al14y unsuit. Su texto es el rango,ofy el palo, como7 of clubs. Los rangos11,12,13y14se escribenJ,Q,KyA:Q of hearts.Handenhand.gdguarda sus cartas en_cards. Su texto esHand (N):seguido de los textos de las cartas unidos con,, oHand (0): emptycuando no tiene cartas.
El código proporcionado imprime la mano vacía, lee el número de cartas y después una línea RANK SUIT por cada carta. Añade cada carta a la mano, imprime Drew y la carta, y finalmente imprime la mano. Para las cartas 7 clubs y 12 hearts, imprime:
Hand (0): empty
Drew 7 of clubs
Drew Q of hearts
Hand (2): 7 of clubs, Q of heartsTu código va en playing_card.gd y hand.gd. main.gd contiene el código de entrada/salida proporcionado y no se puede editar.
Pruébalo tú mismo
extends Node
func _ready():
# Código de entrada/salida proporcionado: mantenlo tal como está
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)
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Programación orientada a objetos
1Fundamentos de la programación orientada a objetos
Archivos externosIntroducción a la programación orientada a objetosClases vs. objetosLa palabra clave selfMétodosPropiedadesConstructor (_init)Repaso: calculadora sencilla4Polimorfismo
Repaso de la sobrescritura de métodosTipado patoClases y métodos abstractosDiseño de interfacesRepaso: calculadora de formas7Señales
¿Qué es una señal?Declarar y emitirConectarse a las señalesSeñales con argumentosRepaso: sistema de salud10Patrones de diseño, parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón Composite2Propiedades de clase
Variables de instancia y estáticasFunciones estáticasMétodos setter de propiedadesMétodos getter de propiedadesPrivado por convenciónRepaso: administrador de cuentas bancarias5Encapsulación
Miembros públicos y privadosValidación con settersOcultación de informaciónPropiedades de solo lecturaRepaso: sistema de registros de estudiantes8Conceptos avanzados de POO
Composición frente a herenciaClases internasNodos como componentesRefCounted frente a NodeEnums en clases3Herencia
Herencia básicaLa palabra clave superSobrescritura de métodosCadenas de herenciaComprobaciones de tipo con isRepaso: jerarquía de empleados6Métodos especiales
Introducción a los métodos virtualesEl método _to_stringIteradores personalizadosRepaso: lista personalizada9Patrones de diseño, parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón StrategyPractica por tu cuenta: Compilador de GDScript online