oTree:如何从model.py中的播放器类访问播放器的ID?
我想通过播放器的默认属性id_in_group定义一个参数变量。但是,这个属性似乎不能通过我能想到的方式访问(比如通过BasePlayer.id_in_group)。oTree:如何从model.py中的播放器类访问播放器的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
我怎么能访问属性id_in_group?或者它是不可能的,因为它是由oTree预设的默认属性?
您是否尝试过通过super.id_in_group
或self.id_in_group
访问变量?如果它是父类的变量,则不会像您所做的那样直接调用该类。
此外,谷歌有一吨结果如何访问父类变量,其中很多是来自计算器的答案来解释的东西真的很好:-)
当我使用“super”时,错误是:type object'super'没有属性'id_in_group';当我使用'自我'时,错误是:未解决的参考'自我'。我认为这与父母班没有任何关系。但谢谢你的答案。 – Aqqqq
你可以发布BasePlayer类代码吗?看起来很奇怪,假设你的继承设置正确,'self'不能解决问题。 –
'超级'是一个函数,无论如何在这一点上都没有意义; 'self'只能在方法中使用。 –
在oTree的id_in_group
属性在会议结束后的分配开始。这很合乎逻辑,因为在会议开始之前还没有形成小组。
如果没有玩家分配到组,则尝试在Player类声明中分配一个值,因此没有人拥有他/她的id_in_group
。此外,您为模型的属性赋值,而不是赋予特定实例(即玩家)的字段。如果你需要根据他/她的组ID分配给random_id
场每个球员的具体值请执行以下操作:
在models.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
为什么你要定义' random_number'呢? –
不同的图片会显示给与此随机数对应的不同主题。 – Aqqqq
但是,为什么你不使用'id_in_group'?为什么将它分配给不同的名称? –