Konstruktor (_init)
Teil des Abschnitts Objektorientierte Programmierung der GDScript-Journey von Coddy. Lektion 7 von 65.
Jede Eigenschaft nach new() festzulegen, erfordert mehrere Zeilen, und leicht vergisst man eine. Ein Konstruktor richtet ein Objekt ein, sobald es erstellt wird. In GDScript ist der Konstruktor die Methode _init():
# book.gd
class_name Book
extends RefCounted
var title: String
var author: String
var pages: int
func _init(book_title: String, book_author: String, page_count: int) -> void:
title = book_title
author = book_author
pages = page_countDie Argumente, die du an new() übergibst, werden an _init() weitergegeben, das automatisch ausgeführt wird, bevor new() das Objekt zurückgibt:
var dune := Book.new("Dune", "Frank Herbert", 412)
print(dune.title) # Dune
print(dune.pages) # 412Wenn _init() Parameter hat, muss new() sie übergeben: Book.new() ohne Argumente führt zu einem Fehler, der gemeldet wird, bevor das Programm ausgeführt wird. Ein Parameter mit einem Standardwert ist optional:
func _init(book_title: String, book_author: String = "Unknown") -> void:Mit diesem Konstruktor erstellt Book.new("Notes") ein Buch, dessen Autor "Unknown" ist.
Die Parameternamen oben unterscheiden sich von den Eigenschaftsnamen. Wenn sie gleich wären, würdest du self.title = title schreiben, wie in der Lektion zu self.
Aufgabe
EinfachVervollständige die Klasse Book in book.gd:
- Der Konstruktor
_init(book_title, book_author, page_count)speichert seine Argumente in den Eigenschaftentitle,authorundpages. describe()gibt'TITLE' by AUTHOR, PAGES pageszurück, wobei der Titel in einfachen Anführungszeichen steht.
Der bereitgestellte Code liest ein, wie viele Bücher folgen, und danach eine Zeile pro Buch mit Titel, Autor und Seitenzahl, getrennt durch ;. Er erstellt jedes Buch mit Book.new(), gibt describe() aus und gibt schließlich die Summe der pages-Eigenschaften aus. Für die Zeile Dune;Frank Herbert;412 gibt er Folgendes aus:
'Dune' by Frank Herbert, 412 pages
Total pages: 412Dein Code gehört in book.gd. main.gd enthält den bereitgestellten Ein-/Ausgabecode und kann nicht bearbeitet werden.
Probier es selbst
extends Node
func _ready():
# Vorgegebener Eingabe-/Ausgabecode: unverändert lassen
var count := int(OS.read_string_from_stdin())
var total := 0
for i in count:
var parts := OS.read_string_from_stdin().split(";")
var book := Book.new(parts[0], parts[1], int(parts[2]))
print(book.describe())
total += book.pages
print("Total pages: %d" % total)
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