我正在制作游戏。每次发生某个动作时,它都会发送一个信号。该信号被许多不同的对象使用。例如,玩家模型实例会恢复一点生命值,灯笼会减少他们剩下的油量。我希望这些模型的实例在发出信号时做出反应并修改它们的数据。但是,我不知道如何在接收函数中引用实例本身,因为我不能将“self”放在函数使用的参数列表中。
class Lantern(models.Model):
oil_left= models.IntegerField(default=4)
@receiver(mySignal)
def burn(sender, **kwargs):
self.oil_left -= 1 #<- self is not defined obviously
self.save() #<- self is not defined obviously
为什么将接收器作为实例方法?因为在发送信号时,对信号做出反应的实例列表是未知的。该信号只是一个 ping 通知感兴趣的对象(即使用接收器方法)发生了事件,因此它们可以触发自己的特定行为。