Menu
CoddyTech

La palabra clave self

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

Una función declarada en una clase se ejecuta en un objeto concreto: el que está antes del punto en la llamada. Dentro de la función, la palabra clave self se refiere a ese objeto.

# car.gd
class_name Car
extends RefCounted

var color: String = "Red"
var model: String = "Sedan"

func describe() -> void:
	print("I am a %s %s" % [self.color, self.model])

my_car.describe() ejecuta describe() con self establecido en my_car, así que la función lee las variables de ese auto. Nunca pasas self tú mismo:

var my_car := Car.new()
var taxi := Car.new()
taxi.color = "Yellow"
my_car.describe() # Soy un sedán rojo
taxi.describe() # Soy un sedán amarillo

Escribir self. es opcional. Dentro de una función de clase, color por sí solo ya significa el color del objeto, así que print("I am a %s %s" % [color, model]) hace lo mismo.

Necesitas self cuando un parámetro tiene el mismo nombre que una variable de la clase. Dentro de la función, el nombre se refiere al parámetro, y self. selecciona la variable del objeto:

func repaint(color: String) -> void:
	self.color = color

Sin self., la línea color = color copia el parámetro sobre sí mismo y el auto conserva su color anterior.

challenge icon

Desafío

Fácil

Completa las dos funciones de la clase Car en car.gd:

  • set_info(year, make, model) almacena sus tres parámetros en las variables del auto con los mismos nombres
  • describe() devuelve This car is a YEAR MAKE MODEL, por ejemplo This car is a 2020 Toyota Corolla

El código proporcionado lee cuántos autos vienen a continuación y luego una línea por cada auto (year make model). Crea cada auto, llama a set_info() e imprime describe() para cada auto. Para la línea 2020 Toyota Corolla, imprime:

This car is a 2020 Toyota Corolla

Tu código va en car.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 cars: Array[Car] = []
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ")
		var car := Car.new()
		car.set_info(int(parts[0]), parts[1], parts[2])
		cars.append(car)
	for car in cars:
		print(car.describe())
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