2016-08-24 4 views
-1

私は、プレーヤーのデフォルト属性id_in_groupを介してパラメータ変数を定義したいと考えています。しかし、この属性は、(BasePlayer.id_in_groupなどを介して)考えられる方法ではアクセスできないようです。oTree:player.pyからプレーヤーのIDにアクセスするには?

クラスのプレーヤーのコード:私は属性を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 

?または、oTreeによってプリセットされたデフォルト属性であるために不可能ですか?

+0

は、なぜあなたは定義したいん ' random_number'はまったくですか? –

+0

このrandom_numberに対応する異なるテーマに異なる画像が表示されます。 – Aqqqq

+0

しかし、なぜ 'id_in_group'を使用しないのですか?なぜそれを別の名前に割り当てるのですか? –

答えて

-1

super.id_in_groupまたはself.id_in_groupで変数にアクセスしようとしましたか?それが親クラスの変数であれば、自分が行っているようにクラスを直接呼び出すことはありません。

また、Googleは、oTreeに

+0

"super"を使用したとき、エラーは次のようになりました:typeオブジェクト 'super'には 'id_in_group'属性がありません。私が「自己」を使用したとき、エラーは次のようになりました。未解決の参照「自己」。私はそれが親クラスとは関係がないと思う。しかし、答えに感謝します。 – Aqqqq

+0

BasePlayerのクラスコードを投稿できますか?あなたの継承が正しく設定されていると仮定すると、 'self'は問題を解決できないということは奇妙に思えます。 –

+0

'super'は関数であり、とにかくその時点で意味をなさないでしょう。 'self'はメソッド内でのみ利用可能です。 –

1

:-)本当によく物事を説明するがid_in_group属性がセッションの後に割り当てられたstackoverflowのからの回答である、多くの親クラス変数にアクセスする方法の結果のトンを持っています開始しました。セッションが始まる前にまだグループが形成されていないので、これはかなり論理的です。

プレイヤークラス宣言に値を割り当てようとしていますが、グループに割り当てられていないプレイヤーがいない場合、誰も彼/彼女の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 
関連する問題