Menu
CoddyTech

Constructor (_init)

Parte de la sección Programación orientada a objetos del Journey de GDScript de Coddy. Lección 7 de 65.

Establecer cada propiedad después de new() requiere varias líneas, y es fácil olvidar alguna. Un constructor prepara un objeto cuando se crea. En GDScript, el constructor es el método _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

Los argumentos que pasas a new() se pasan a _init(), que se ejecuta automáticamente antes de que new() devuelva el objeto:

var dune := Book.new("Dune", "Frank Herbert", 412)
print(dune.title) # Dune
print(dune.pages) # 412

Cuando _init() tiene parámetros, new() debe pasárselos: Book.new() sin argumentos es un error que se notifica antes de que se ejecute el programa. Un parámetro con un valor predeterminado es opcional:

func _init(book_title: String, book_author: String = "Unknown") -> void:

Con este constructor, Book.new("Notes") crea un libro cuyo autor es "Unknown".

Los nombres de los parámetros de arriba difieren de los nombres de las propiedades. Si fueran iguales, escribirías self.title = title, como en la lección sobre self.

challenge icon

Desafío

Fácil

Completa la clase Book en book.gd:

  • el constructor _init(book_title, book_author, page_count) almacena sus argumentos en las propiedades title, author y pages
  • describe() devuelve 'TITLE' by AUTHOR, PAGES pages, con el título entre comillas simples

El código proporcionado lee cuántos libros vienen a continuación y luego una línea por libro con el título, el autor y el número de páginas separados por ;. Crea cada libro con Book.new(), imprime describe() y, finalmente, imprime el total de las propiedades pages. Para la línea Dune;Frank Herbert;412, imprime:

'Dune' by Frank Herbert, 412 pages
Total pages: 412

Tu código va en book.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: déjalo tal como está
	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 iconPonte a prueba

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

Practica por tu cuenta: Compilador de GDScript online