Metoda _to_string
Część sekcji Programowanie obiektowe ścieżki GDScript w Coddy. Lekcja 32 z 65.
Wyświetlenie obiektu, którego klasa nie definiuje _to_string(), pokazuje tylko jego klasę i wewnętrzny identyfikator, który zmienia się przy każdym uruchomieniu: <RefCounted#-9223372009541466673>. Zdefiniuj _to_string() i zwróć tekst, który powinien pojawić się zamiast tego:
# 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 wywołuje ją za każdym razem, gdy obiekt jest zamieniany na tekst: przez print(), przez str(), przez %s w ciągu formatującym oraz dla każdego obiektu wewnątrz wypisywanej tablicy lub słownika:
var card := Card.new("Queen", "hearts")
print(card) # Dama kier
print(str(card)) # Dama kier
print("You drew %s" % card) # Dobrałeś damę kier
print([card, Card.new("7", "clubs")]) # [Dama kier, 7 trefl]"You drew " + card nadal powoduje błąd, ponieważ + łączy dwa ciągi znaków, a card jest obiektem. Najpierw przekonwertuj go: "You drew " + str(card).
Podklasa może przesłonić _to_string() i użyć tekstu klasy nadrzędnej za pomocą super():
# wild_card.gd
class_name WildCard
extends Card
func _to_string() -> String:
return "Wild " + super()print(WildCard.new("King", "spades")) wyświetla Wild King of spades.
_to_string() zwraca tekst i sam niczego nie wyświetla. Kod korzystający z obiektu decyduje, czy tekst zostanie wyświetlony, połączony w dłuższy wiersz czy zapisany.
Wyzwanie
ŁatwyDodaj metodę _to_string() do dwóch klas:
PlayingCardw plikuplaying_card.gdmarankod2do14orazsuit. Jego tekst to ranga,ofi kolor, na przykład7 of clubs. Rangi11,12,13i14zapisuje się jakoJ,Q,KiA:Q of hearts.Handw plikuhand.gdprzechowuje karty w_cards. Jego tekst toHand (N):, a po nim teksty kart połączone za pomocą,, lubHand (0): empty, gdy nie ma w nim kart.
Dostarczony kod wyświetla pustą rękę, odczytuje liczbę kart, a następnie po jednym wierszu RANK SUIT dla każdej karty. Dodaje każdą kartę do ręki, wyświetla Drew i kartę, a na końcu wyświetla rękę. Dla kart 7 clubs i 12 hearts wyświetla:
Hand (0): empty
Drew 7 of clubs
Drew Q of hearts
Hand (2): 7 of clubs, Q of heartsTwój kod umieść w plikach playing_card.gd i hand.gd. Plik main.gd zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
extends Node
func _ready():
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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)
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe selfMetodyWłaściwościKonstruktor (_init)Powtórka – prosty kalkulator4Polimorfizm
Ponowne omówienie przesłaniania metodDuck typingKlasy i metody abstrakcyjneProjektowanie interfejsówPowtórzenie – kalkulator kształtów7Sygnały
Czym jest sygnał?Deklarowanie i emitowanieŁączenie z sygnałamiSygnały z argumentamiPodsumowanie — system zdrowia10Wzorce projektowe, część 2
Wzorzec poleceniaWzorzec adapteraWzorzec dekoratoraWzorzec metody szablonowejWzorzec stanuWzorzec kompozytu2Właściwości klas
Zmienne instancji a zmienne statyczneFunkcje statyczneSettery właściwościGettery właściwościPrywatne z konwencjiPodsumowanie — menedżer kont bankowych5Enkapsulacja
Elementy publiczne i prywatneWalidacja za pomocą setterówUkrywanie informacjiWłaściwości tylko do odczytuPodsumowanie – system ewidencji uczniów8Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieKlasy wewnętrzneWęzły jako komponentyRefCounted a NodeTypy wyliczeniowe w klasach11Projekt: Zarządzanie biblioteką
Przegląd projektuKlasy książki i użytkownika3Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe superNadpisywanie metodŁańcuchy dziedziczeniaSprawdzanie typów za pomocą isPodsumowanie – hierarchia pracowników6Metody specjalne
Wprowadzenie do metod wirtualnychMetoda _to_stringWłasne iteratoryPodsumowanie — własna lista9Wzorce projektowe — część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec StrategyPoćwicz samodzielnie: Kompilator GDScript online