oTree: Как получить доступ к идентификатору игрока из класса игрока в model.py?

Я хотел бы определить переменную параметра через атрибут по умолчанию 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?

2 ответа

В другом id_in_group Атрибут назначается после начала сеанса. Это вполне логично, потому что группы еще не были сформированы до начала сессии.

Вы пытаетесь присвоить значение в объявлении класса Player, когда ни один из игроков не был назначен в группы, таким образом, никто не имеет его / ее id_in_group,

Кроме того, вы присваиваете значение свойству модели, а не полям конкретных экземпляров (т. Е. Игрокам). Если вам нужно назначить 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 

Вы пытались получить доступ к переменной через super.id_in_group или же self.id_in_group? Если это переменная родительского класса, вы бы не вызывали этот класс напрямую, как вы это делаете.

Кроме того, у Google есть масса результатов о том, как получить доступ к переменным родительского класса, многие из которых являются ответами от stackru, которые объясняют вещи действительно хорошо:-)

Другие вопросы по тегам