2016-08-24 60 views
-1

我想通過播放器的默認屬性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預設的默認屬性?

+0

爲什麼你要定義' random_number'呢? –

+0

不同的圖片會顯示給與此隨機數對應的不同主題。 – Aqqqq

+0

但是,爲什麼你不使用'id_in_group'?爲什麼將它分配給不同的名稱? –

回答

-1

您是否嘗試過通過super.id_in_groupself.id_in_group訪問變量?如果它是父類的變量,則不會像您所做的那樣直接調用該類。

此外,谷歌有一噸結果如何訪問父類變量,其中很多是來自計算器的答案來解釋的東西真的很好:-)

+0

當我使用「super」時,錯誤是:type object'super'沒有屬性'id_in_group';當我使用'自我'時,錯誤是:未解決的參考'自我'。我認爲這與父母班沒有任何關係。但謝謝你的答案。 – Aqqqq

+0

你可以發佈BasePlayer類代碼嗎?看起來很奇怪,假設你的繼承設置正確,'self'不能解決問題。 –

+0

'超級'是一個函數,無論如何在這一點上都沒有意義; 'self'只能在方法中使用。 –

1

在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 
相關問題