在保留其功能的同时覆盖关键的基本方法而不会使我的代码变臭
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*
我想做的是:
- “扩展”而不是覆盖 on_met_customer() 以在不调用 super 的情况下保留父级功能,或者:
- 在覆盖 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()
在 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*
我想做的是:
- “扩展”而不是覆盖 on_met_customer() 以在不调用 super 的情况下保留父级功能,或者:
- 在覆盖 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()