Słowo kluczowe self
Część sekcji Programowanie obiektowe ścieżki GDScript w Coddy. Lekcja 4 z 65.
Funkcja zadeklarowana w klasie działa na jednym konkretnym obiekcie: tym, który znajduje się przed kropką w wywołaniu. Wewnątrz funkcji słowo kluczowe self odnosi się do tego obiektu.
# 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() uruchamia describe() z self ustawionym na my_car, więc funkcja odczytuje zmienne tego samochodu. Nigdy nie przekazujesz self samodzielnie:
var my_car := Car.new()
var taxi := Car.new()
taxi.color = "Yellow"
my_car.describe() # Jestem czerwonym sedanem
taxi.describe() # Jestem żółtym sedanemZapisywanie self. jest opcjonalne. Wewnątrz funkcji klasy samo color oznacza już color obiektu, więc print("I am a %s %s" % [color, model]) robi to samo.
Potrzebujesz self, gdy parametr ma taką samą nazwę jak zmienna klasy. Wewnątrz funkcji ta nazwa oznacza parametr, a self. wskazuje zmienną obiektu:
func repaint(color: String) -> void:
self.color = colorBez self. wiersz color = color przypisuje parametr do samego siebie, a samochód zachowuje swój stary kolor.
Wyzwanie
ŁatwyUzupełnij dwie funkcje klasy Car w pliku car.gd:
set_info(year, make, model)zapisuje trzy parametry w zmiennych samochodu o tych samych nazwachdescribe()zwracaThis car is a YEAR MAKE MODEL, na przykładThis car is a 2020 Toyota Corolla
Dostarczony kod odczytuje liczbę kolejnych samochodów, a następnie po jednym wierszu na samochód (year make model). Tworzy każdy samochód, wywołuje set_info() i wypisuje wynik describe() dla każdego samochodu. Dla wiersza 2020 Toyota Corolla wypisuje:
This car is a 2020 Toyota CorollaTwój kod umieść w pliku car.gd. Plik main.gd zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
extends Node
func _ready():
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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())
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe selfMetodyWłaściwościKonstruktor (_init)Powtórka – prosty kalkulator4Polimorfizm
Ponowne omówienie przesłaniania metodDuck typingKlasy i metody abstrakcyjneProjektowanie interfejsówPowtórzenie – kalkulator kształtów7Sygnały
Czym jest sygnał?Deklarowanie i emitowanieŁączenie z sygnałamiSygnały z argumentamiPodsumowanie — system zdrowia10Wzorce projektowe, część 2
Wzorzec poleceniaWzorzec adapteraWzorzec dekoratoraWzorzec metody szablonowejWzorzec stanuWzorzec kompozytu2Właściwości klas
Zmienne instancji a zmienne statyczneFunkcje statyczneSettery właściwościGettery właściwościPrywatne z konwencjiPodsumowanie — menedżer kont bankowych5Enkapsulacja
Elementy publiczne i prywatneWalidacja za pomocą setterówUkrywanie informacjiWłaściwości tylko do odczytuPodsumowanie – system ewidencji uczniów8Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieKlasy wewnętrzneWęzły jako komponentyRefCounted a NodeTypy wyliczeniowe w klasach11Projekt: Zarządzanie biblioteką
Przegląd projektuKlasy książki i użytkownika3Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe superNadpisywanie metodŁańcuchy dziedziczeniaSprawdzanie typów za pomocą isPodsumowanie – hierarchia pracowników6Metody specjalne
Wprowadzenie do metod wirtualnychMetoda _to_stringWłasne iteratoryPodsumowanie — własna lista9Wzorce projektowe — część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec StrategyPoćwicz samodzielnie: Kompilator GDScript online