Menu
CoddyTech

属性获取方法

本课属于 Coddy GDScript 学习旅程的“面向对象编程”单元。第 12 课,共 65 课。

get: 代码块是属性的 getter,每次读取属性时都会运行,它返回的内容就是读取者获取的值。可以用它来获取根据其他属性计算出的值:

# rectangle.gd
var width: int = 4
var height: int = 3
var area: int:
	get:
		return width * height
var r := Rectangle.new()
print(r.area) # 12
r.width = 10
print(r.area) # 30

r.area 看起来像变量,不带括号,但每次读取时都会重新计算,因此它始终与当前的宽度和高度相匹配。

一个属性可以同时包含两个代码块。这里,fahrenheit 只负责转换:读取它时,会从 celsius 转换;为它赋值时,会转换回摄氏度,并将结果存储在 celsius 中:

# temperature.gd
var celsius: float = 0.0
var fahrenheit: float:
	get:
		return celsius * 9 / 5 + 32
	set(value):
		celsius = (value - 32) * 5 / 9
t.celsius = 25.0
print(t.fahrenheit) # 77.0
t.fahrenheit = 98.6
print(t.celsius) # 37.0

按照惯例,只有 get: 的属性是只读的。给它赋值不会报错,但 getter 会忽略赋的值:执行 r.area = 100 后,r.area 仍然返回 30。

challenge icon

挑战

简单

完成 temperature.gd 中的类 Temperature。它存储一个值 celsius,并根据它计算其他温标:

  • fahrenheit:getter 返回 celsius * 9 / 5 + 32,setter 将 (value - 32) * 5 / 9 存入 celsius
  • kelvin:只读属性,其 getter 返回 celsius + 273.15

提供的代码会读取后续命令的数量,然后逐行读取命令:c VALUE 会设置 celsius,f VALUE 会设置 fahrenheit。每条命令执行后,它会以两位小数打印这三个属性。对于 c 25、f 98.6 和 c -40,输出为:

25.00 C | 77.00 F | 298.15 K
37.00 C | 98.60 F | 310.15 K
-40.00 C | -40.00 F | 233.15 K

你的代码写在 temperature.gd 中。main.gd 包含提供的输入/输出代码,不能编辑。

亲手试试

extends Node

func _ready():
	# 已提供的输入输出代码:保持原样。
	var temp := Temperature.new()
	var count := int(OS.read_string_from_stdin())
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ")
		if parts[0] == "c":
			temp.celsius = float(parts[1])
		else:
			temp.fahrenheit = float(parts[1])
		print("%.2f C | %.2f F | %.2f K" % [temp.celsius, temp.fahrenheit, temp.kelvin])
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: GDScript 在线编译器