2017-05-18 19 views
1

考慮一個3輪遊戲。玩家在每一輪都做出選擇(存儲在變量choice中)。in_round()函數在oTree

現在,在第三輪我想打電話someFunction,從而獲得第二輪的選擇。

不幸的是someFunction返回None。我不懂爲什麼。如果我把函數調用放在一個模板文件中,一切正常。

幫助將appriciated - 我一直在尋找小時。

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 

這是怎麼發生的?

+0

實際的錯誤是什麼? – OptimusCrime

+0

player.participant.vars ['someKey']是None,而不是A,B,C(來自不明回合的選擇變量)。 –

+0

但是,這個變量是如何定義的以及它如何被填充,它沒有解釋。我們所看到的只是'Player.choice'。 – OptimusCrime

回答

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