Le mot-clé self
Fait partie de la section Programmation orientée objet du Journey GDScript de Coddy. Leçon 4 sur 65.
Une fonction déclarée dans une classe s’exécute sur un objet particulier : celui qui se trouve avant le point dans l’appel. À l’intérieur de la fonction, le mot-clé self fait référence à cet objet.
# 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() exécute describe() avec self défini sur my_car, donc la fonction lit les variables de cette voiture. Tu ne passes jamais self toi-même :
var my_car := Car.new()
var taxi := Car.new()
taxi.color = "Yellow"
my_car.describe() # Je suis une berline rouge
taxi.describe() # Je suis une berline jauneÉcrire self. est facultatif. Dans une fonction de classe, color seul désigne déjà la color de l'objet, donc print("I am a %s %s" % [color, model]) fait la même chose.
Tu as besoin de self lorsqu’un paramètre porte le même nom qu’une variable de la classe. À l’intérieur de la fonction, le nom désigne le paramètre, et self. désigne la variable de l’objet :
func repaint(color: String) -> void:
self.color = colorSans self., la ligne color = color copie le paramètre sur lui-même, et la voiture conserve son ancienne couleur.
Défi
FacileComplète les deux fonctions de la classe Car dans car.gd :
set_info(year, make, model)stocke ses trois paramètres dans les variables de la voiture portant les mêmes nomsdescribe()renvoieThis car is a YEAR MAKE MODEL, par exempleThis car is a 2020 Toyota Corolla
Le code fourni lit le nombre de voitures qui suivent, puis une ligne par voiture (year make model). Il crée chaque voiture, appelle set_info() et affiche describe() pour chaque voiture. Pour la ligne 2020 Toyota Corolla, il affiche :
This car is a 2020 Toyota CorollaTon code va dans car.gd. main.gd contient le code fourni pour les entrées/sorties et ne peut pas être modifié.
Essayez vous-même
extends Node
func _ready():
# Code d'entrée/sortie fourni : conservez-le tel quel
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())
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Programmation orientée objet
1Fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses et objetsLe mot-clé selfMéthodesPropriétésConstructeur (_init)Récapitulatif - Calculatrice simple4Polymorphisme
Retour sur la redéfinition des méthodesTypage canardClasses et méthodes abstraitesConception d’interfacesRécapitulatif – Calculateur de formes7Signaux
Qu’est-ce qu’un signal ?Déclarer et émettreSe connecter aux signauxSignaux avec argumentsRécapitulatif - système de santé10Patrons de conception, partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode modèlePatron ÉtatPatron Composite2Propriétés de classe
Variables d’instance et variables statiquesFonctions statiquesSetters de propriétésGetters de propriétésPrivé par conventionRécapitulatif - Gestionnaire de comptes bancaires5Encapsulation
Membres publics et privésValidation avec les méthodes setterMasquage de l’informationPropriétés en lecture seuleRécapitulatif - Système de dossiers étudiants8Concepts avancés de la POO
Composition ou héritageClasses internesLes nœuds comme composantsRefCounted ou NodeEnums dans les classes3Héritage
Héritage de baseLe mot-clé superRedéfinition de méthodesChaînes d’héritageVérifier les types avec isRécapitulatif – Hiérarchie des employés6Méthodes spéciales
Introduction aux méthodes virtuellesLa méthode _to_stringItérateurs personnalisésRécapitulatif – Liste personnalisée9Patrons de conception, partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron StrategyEntraînez-vous par vous-même : Compilateur GDScript en ligne