在保留其功能的同时覆盖关键的基本方法而不会使我的代码变臭

Overriding a critical base method while preserving its functionality without making my code smelly

在 Godot 中,可以定义一个信号并在一个方法中发出它,这将调用所有连接到它的方法。在这个例子中,on_met_customer()连接到class商户中的signal met_customer,商户负责检测客户。

# Parent class
extends Merchant
class_name Salesman

func greet():
    print("Hello!")

func on_met_customer():
    greet
# Child class
extends Salesman
class_name CarSalesman

func shake_hands():
    print("*handshake*")
    
func on_met_customer():
    # .on_met_customer() I don't want to have to remember to call super
    shake_hands()
# Desired console output when calling on_met_customer() from the child class
Hello!
*handshake*

我想做的是:

  1. “扩展”而不是覆盖 on_met_customer() 以在不调用 super 的情况下保留父级功能,或者:
  2. 在覆盖 on_met_customer() 时以某种方式警告自己不要忘记调用 super

调用parent是一种习惯;实际上(大多数时候)能有选择是件好事。

如果您真的不想调用 parent 方法,另一种方法是在 Merchant:

中添加您自己的可覆盖方法
extends Merchant
class_name Salesman

func greet():
    print("Hello!")

func meet_customer():
    pass  # override me

func on_met_customer():
    greet()
    meet_customer()
    rob_customer()
    # …

然后在 child 中覆盖它:

extends Salesman
class_name CarSalesman

func shake_hands():
    print("*handshake*")
    
func meet_customer():
    shake_hands()