关于该语言的注意事项:它具有可以相互继承的类。如果后代类具有与祖先类中的函数同名的函数,则祖先类中的函数对于后代的实例根本不会运行。
问题:我想知道创建扩展祖先类行为而不覆盖其中任何一个的函数的最佳方法是什么。
我现在正在做的伪代码:
class_name Animal
func _doSomething():
#do something common to "Animal"
_doSomething_descendantOfAnimal()
func _doSomething_descendantOfAnimal():
#no behaviour here, since it will be overridden by descendants
扩展“Animal”的另一个类的代码
class_name Feline
extends Animal
func _doSomething_descendantOfAnimal():
#behaviour common to "Feline"
_doSomething_descendantOfFeline()
func _doSomething_descendantOfFeline():
#no behaviour here
扩展“Feline”的另一个类的代码
class_name HouseCat
extends Feline
func _doSomething_descendantOfFeline():
#behaviour specific to "HouseCat"
这个组织意味着,当我在
_doSomething()
实例上调用 HouseCat
时,Animal
和 Feline
的共同行为将在 HouseCat
本身的任何特定行为之外运行 。尽管如此,我觉得有一种更干净、更有效的做事方式。例如,不需要我向每个可能由另一个类扩展的类添加空白函数(如
_doSomething_descendantOfFeline()
)。
.
。对于 Godot 4 中的 GDScript 2.0,它是
super.
。Godot 4.1 官方文档的示例:
func some_func(x):
super(x) # Calls the same function on the parent class.
参见 GDScript 基础知识:类继承(最新稳定版本)。
Godot 3.6 示例:
func some_func(x):
.some_func(x) # Calls the same function on the parent class.
请参阅 GDScript 基础知识:类继承 (Godot 3.6)。