Constructeur (_init)
Fait partie de la section Programmation orientée objet du Journey GDScript de Coddy. Leçon 7 sur 65.
Définir chaque propriété après new() nécessite plusieurs lignes, et il est facile d’en oublier une. Un constructeur configure un objet au moment de sa création. En GDScript, le constructeur est la méthode _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_countLes arguments que tu transmets à new() sont transmis à _init(), qui s’exécute automatiquement avant que new() ne renvoie l’objet :
var dune := Book.new("Dune", "Frank Herbert", 412)
print(dune.title) # Dune
print(dune.pages) # 412Lorsque _init() a des paramètres, new() doit les transmettre : Book.new() sans arguments provoque une erreur signalée avant l’exécution du programme. Un paramètre avec une valeur par défaut est facultatif :
func _init(book_title: String, book_author: String = "Unknown") -> void:Avec ce constructeur, Book.new("Notes") crée un livre dont l’auteur est "Unknown".
Les noms des paramètres ci-dessus diffèrent des noms des propriétés. S’ils étaient identiques, vous écririez self.title = title, comme dans la leçon sur self.
Défi
FacileComplétez la classe Book dans book.gd :
- le constructeur
_init(book_title, book_author, page_count)stocke ses arguments dans les propriétéstitle,authoretpages describe()renvoie'TITLE' by AUTHOR, PAGES pages, avec le titre entre apostrophes
Le code fourni lit le nombre de livres qui suivent, puis une ligne par livre contenant le titre, l’auteur et le nombre de pages, séparés par ;. Il crée chaque livre avec Book.new(), affiche describe(), puis affiche la somme des propriétés pages. Pour la ligne Dune;Frank Herbert;412, il affiche :
'Dune' by Frank Herbert, 412 pages
Total pages: 412Votre code va dans book.gd. main.gd contient le code fourni pour les entrées et les 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 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)
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