1

考虑一个有 3 轮的游戏。在每一轮中,玩家都会做出选择(存储在变量中choice)。

现在,在第 3 轮中,我想跟注someFunction,从而访问在第 2 轮中做出的选择。

不幸someFunction返回None。我不懂为什么。如果我将函数调用放在模板文件中,一切正常。

将获得帮助-我一直在寻找几个小时。

class Subsession(BaseSubsession):
    def before_session_starts(self):
        if self.round_number == 3:
            for player in self.get_players():
                player.participant.vars['someKey'] = player.someFunction()

class Player(BasePlayer):
    choice = models.CharField(initial=None,
                                choices=['A','B','C'],
                                widget=widgets.RadioSelect()) 

    def someFunction(self):
        return self.in_round(2).choice

为什么会这样?

4

1 回答 1

1

before_session_starts函数在会话开始之前执行(因此得名)。因此,当它被执行时,玩家还没有完成他/她的选择。这就是为什么someFunction返回 None。

您可以player.participant.vars['someKey'] = self.player.choice在第二轮结束时设置,这将为您提供您正在寻找的结果。

class Choice(Page):
    def before_next_page(self):
        if self.player.round_number == 2:
            player.participant.vars['someKey'] = self.player.choice
于 2017-05-29T18:57:13.413 回答