gpt4 book ai didi

python - Django 信号接收器接受 self 参数

转载 作者:太空宇宙 更新时间:2023-11-04 06:25:35 25 4
gpt4 key购买 nike

我在做游戏。每次发生特定 Action 时,它都会发送一个信号。该信号被许多不同的对象使用。例如,玩家模型实例会恢复一点生命值,灯笼会减少剩余的油量。我希望这些模型的实例在发出信号时使用react并修改它们的数据。但是,我不知道如何在接收函数中引用实例本身,因为我不能将“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

为什么将接收者作为实例方法?因为在发送信号时,对信号使用react的实例列表是未知的。信号只是一个 ping 通知感兴趣的对象(即使用接收器方法)事件发生了,因此它们可以触发自己的特定行为。

最佳答案

为什么要让信号成为实例方法?似乎没有任何理由。您只需要确保当您编写信号函数本身时,它会传递相关实例 - 例如作为 instance kwarg - 与内置的 pre-save 完全一样post-save 信号会。

在编辑问题后添加 但这正是信号应该如何工作的。有一个单一的信号函数,它发送信号连同任何关联信息,以及任意数量的收听信号的接收器。但是接收器本身不与特定实例相关联 - 它们不可能,一个实例仅在您实际实例化它时才存在(!),否则它只是数据库中的一行。

也许您的接收器函数可以查询相关对象本身,并在那里更新它们 - 或者更好的是,执行 update 查询以就地更改它们。

关于python - Django 信号接收器接受 self 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8553970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com