Die _to_string-Methode
Teil des Abschnitts Objektorientierte Programmierung der GDScript-Journey von Coddy. Lektion 32 von 65.
Beim Ausgeben eines Objekts, dessen Klasse _to_string() nicht definiert, werden nur dessen Klasse und eine interne ID angezeigt, die sich bei jedem Durchlauf ändert: <RefCounted#-9223372009541466673>. Definiere _to_string() und gib den Text zurück, der stattdessen erscheinen soll:
# 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 ruft es jedes Mal auf, wenn das Objekt in Text umgewandelt wird: durch print(), durch str(), durch %s in einer Formatzeichenfolge und für jedes Objekt in einem ausgegebenen Array oder Dictionary:
var card := Card.new("Queen", "hearts")
print(card) # Herz-Dame
print(str(card)) # Herz-Dame
print("You drew %s" % card) # Du hast die Herz-Dame gezogen
print([card, Card.new("7", "clubs")]) # [Herz-Dame, Kreuz-7]"You drew " + card ist weiterhin ein Fehler, weil + zwei Strings verknüpft und card ein Objekt ist. Wandle es zuerst um: "You drew " + str(card).
Eine Unterklasse kann _to_string() überschreiben und den Text der Elternklasse mit super() verwenden:
# wild_card.gd
class_name WildCard
extends Card
func _to_string() -> String:
return "Wild " + super()print(WildCard.new("King", "spades")) gibt Wild King of spades aus.
_to_string() gibt den Text zurück und gibt selbst nichts aus. Der Code, der das Objekt verwendet, entscheidet, ob der Text ausgegeben, zu einer längeren Zeile zusammengefügt oder gespeichert wird.
Aufgabe
EinfachGib zwei Klassen eine _to_string()-Methode:
PlayingCardinplaying_card.gdhat einenrankvon2bis14und einesuit. Sein Text besteht aus dem Rang,ofund der Farbe, zum Beispiel7 of clubs. Die Ränge11,12,13und14werden alsJ,Q,KundAgeschrieben:Q of hearts.Handinhand.gdspeichert seine Karten in_cards. Sein Text istHand (N):, gefolgt von den Texten der Karten, verbunden mit,, oderHand (0): empty, wenn sie keine Karten enthält.
Der vorgegebene Code gibt die leere Hand aus, liest die Anzahl der Karten und dann eine RANK SUIT-Zeile pro Karte. Er fügt jede Karte der Hand hinzu, gibt Drew und die Karte aus und gibt schließlich die Hand aus. Für die Karten 7 clubs und 12 hearts gibt er Folgendes aus:
Hand (0): empty
Drew 7 of clubs
Drew Q of hearts
Hand (2): 7 of clubs, Q of heartsDein Code gehört in playing_card.gd und hand.gd. main.gd enthält den vorgegebenen Eingabe-/Ausgabecode und kann nicht bearbeitet werden.
Probier es selbst
extends Node
func _ready():
# Vorgegebener Ein-/Ausgabecode: unverändert lassen
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)
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas Schlüsselwort selfMethodenEigenschaftenKonstruktor (_init)Wiederholung – Einfacher Taschenrechner4Polymorphie
Methodenüberschreibung erneut betrachtetDuck-TypisierungAbstrakte Klassen und MethodenSchnittstellendesignRückblick – Formrechner2Klassenattribute
Instanz- vs. statische VariablenStatische FunktionenProperty-SetterProperty-GetterPrivat nach KonventionWiederholung – Bankkontenverwaltung5Kapselung
Öffentliche und private MemberValidierung mit SetternInformationsverbergenSchreibgeschützte EigenschaftenRückblick – System zur Schülerverwaltung8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungInnere KlassenNodes als KomponentenRefCounted vs. NodeEnums in Klassen11Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen3Vererbung
Grundlegende VererbungDas Schlüsselwort superMethodenüberschreibungVererbungskettenTypprüfungen mit isWiederholung – Mitarbeiterhierarchie6Spezielle Methoden
Einführung in virtuelle MethodenDie _to_string-MethodeBenutzerdefinierte IteratorenRückblick – Benutzerdefinierte Liste9Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterBeobachter-MusterStrategie-Muster12Abschließende Herausforderungen
E-Learning-PlattformBankensystemEntwicklung von SpielfigurenFahrzeugvermietungÜbe selbstständig: Online-GDScript-Compiler