如何从中的player类访问玩家的idmodel.py?

2024-05-15 11:20:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我想定义一个参数变量通过默认的属性id_在玩家的组。然而,这个属性似乎无法通过我所能想到的方式(例如via)访问BasePlayer.id_在_组中). 在

班级玩家代码:

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

我如何访问_group中的属性id_?还是因为它是oTree预设的默认属性而不可能?在


Tags: 代码inselfid参数属性定义方式
2条回答

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

您试图在Player类声明中分配一个值,当没有一个玩家被分配到组时,因此没有人拥有他/她的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 

您是否尝试过通过super.id_in_groupself.id_in_group访问变量?如果它是父类的变量,就不会像现在这样直接调用该类。在

另外,Google有很多关于如何访问父类变量的结果,其中很多都是stackoverflow的答案,可以很好地解释问题:-)

相关问题 更多 >