-1

我想通过播放器的默认属性 id_in_group 定义一个参数变量。但是,似乎无法通过我能想到的方式访问此属性(例如通过 BasePlayer.id_in_group)。

类播放器的代码:

class Player(BasePlayer):
    investment_amount = models.CurrencyField(
        doc="""
        Amount invested by this player.
        """,
        min=0, max=Constants.endowment
    )
    random_number = BasePlayer.id_in_group

    def set_payoffs(self):
        for p in self.get_players():
            p.payoff = 110

如何访问属性 id_in_group?还是因为它是oTree预设的默认属性而不可能?

4

2 回答 2

2

在 oTree 中,id_in_group属性是在会话开始后分配的。这是非常合乎逻辑的,因为在会议开始之前还没有形成小组。

您试图在 Player 类声明中分配一个值,当没有玩家被分配到组时,因此没有人拥有 his/her id_in_group

此外,您将值分配给模型的属性,而不是特定实例(即玩家)的字段。如果您需要根据random_id组中的每个玩家的 ID 为每个玩家的字段分配一个特定值,请执行以下操作:

模型.py中:

class Player(BasePlayer):
     random_id = models.IntegerField()

class Subsession(BaseSubsession):
     def before_session_starts(self):
         for p in self.get_players():
             p.random_id = p.id_in_group 
于 2017-06-12T16:51:46.267 回答
-1

您是否尝试过通过super.id_in_groupor访问变量self.id_in_group?如果它是父类的变量,您不会像您正在做的那样直接调用该类。

此外,谷歌有大量关于如何访问父类变量的结果,其中很多是来自 stackoverflow 的答案,它们很好地解释了事情:-)

于 2016-08-24T14:09:08.720 回答