Menu
CoddyTech

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_count

Die 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) # 412

Wenn _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.

challenge icon

Aufgabe

Einfach

Vervollständige die Klasse Book in book.gd:

  • Der Konstruktor _init(book_title, book_author, page_count) speichert seine Argumente in den Eigenschaften title, author und pages.
  • describe() gibt 'TITLE' by AUTHOR, PAGES pages zurü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: 412

Dein 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)
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-GDScript-Compiler