Menu
CoddyTech

Hàm khởi tạo (_init)

Thuộc phần Lập trình hướng đối tượng trong hành trình GDScript của Coddy. Bài học 7 trên 65.

Đặt từng thuộc tính sau new() cần vài dòng, và bạn rất dễ quên một thuộc tính. Hàm khởi tạo thiết lập đối tượng ngay khi tạo. Trong GDScript, hàm khởi tạo là phương thức _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

Các đối số bạn truyền vào new() sẽ được chuyển đến _init(), hàm này tự động chạy trước khi new() trả về đối tượng:

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

Khi _init() có tham số, new() phải truyền các tham số đó: Book.new() không có đối số sẽ gây lỗi được báo trước khi chương trình chạy. Tham số có giá trị mặc định là không bắt buộc:

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

Với hàm khởi tạo này, Book.new("Notes") tạo một quyển sách có tác giả là "Unknown".

Tên tham số ở trên khác với tên thuộc tính. Nếu chúng giống nhau, bạn sẽ viết self.title = title, như trong bài học về self.

challenge icon

Thử thách

Dễ

Hoàn thiện lớp Book trong book.gd:

  • hàm khởi tạo (constructor) _init(book_title, book_author, page_count) lưu các đối số vào thuộc tính title, author và pages
  • describe() trả về 'TITLE' by AUTHOR, PAGES pages, với tiêu đề nằm trong dấu nháy đơn

Code được cung cấp đọc số lượng sách tiếp theo, rồi đọc mỗi sách trên một dòng, gồm tiêu đề, tác giả và số trang được phân tách bằng ;. Code tạo từng quyển sách bằng Book.new(), in ra describe(), rồi in tổng các thuộc tính pages. Với dòng Dune;Frank Herbert;412, chương trình in ra:

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

Hãy viết code vào book.gd. main.gd chứa code đầu vào/đầu ra được cung cấp và bạn không thể chỉnh sửa tệp này.

Tự làm thử

extends Node

func _ready():
	# Đoạn code đầu vào/đầu ra đã có sẵn: giữ nguyên
	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 iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch GDScript online