2017-11-29 12 views
1

プレイ中に何人プレイヤーがプレイしたかを示す静的クラス属性number_of_playersをクラス内で変更できます。割り当て前に参照されるローカル変数。プレイヤー数の静的クラス属性

私は私の親クラスを持っている:私はnumber_of_playersを変更しようとすると、しかし、子クラスでは、私は、ローカル変数がassingmentエラーの前に参照されているそうだ

class SceneBase: 
    number_of_players = None 
#more code 

class ChooseNumberOfPlayersScene(SceneBase): 

    def change_to_one_player_mode(self): 

     number_of_players = 1 
     print("The number of players is now" + number_of_players) 

私も自己属性

class SceneBase: 

    def __init__(self): 

     self.number_of_players = None 

として選手の数を初期化しようとしている。しかし、私はこれであることを実行しようとすると:

class ChooseNumberOfPlayersScene(SceneBase): 

     def change_to_one_player_mode(self): 

      self.number_of_players = 1 
      print("The number of players is now" + self.number_of_players) 

self.number_of_players決して変更とリターンなし

私のプレイヤー数を変更する方法は混乱しています。すべてのクラスで変更可能にする方法はありますか?

+2

クラスメンバー属性を行う場合は、1つのようにアクセスする必要があります。 – user1767754

+0

これはインスタンス変数を使用する必要があるようです。特定のクラスインスタンスのデフォルト値を上書きするように 'self.number_of_players'を設定するだけです。 –

+0

@ user1767754私は基本クラスを変更するつもりはないと思います。 –

答えて

0

プレーヤーの数を次のシーンに直接渡すか、シーンマネージャーに次のシーンに転送させることができます(persistent_dataディクショナリがすべてのシーンに渡されている可能性があります)。

class ChooseNumberOfPlayersScene: 

    def __init__(self): 
     self.next_scene = None 
     self.number_of_players = 1 

    def handle_event(self, event): 
     if event.type == pg.KEYDOWN: 
      if event.key == pg.K_n: 
       # Create the next scene instance and pass 
       # the number_of_players to the game scene. 
       self.next_scene = GameScene(self.number_of_players) 
      elif event.key == pg.K_UP: 
       self.number_of_players += 1 

class GameScene: 

    def __init__(self, number_of_players): 
     self.number_of_players = number_of_players 

SceneManagerシーンif scene.next_scene is not Noneを切り替えます。

また、ChooseNumberOfPlayersSceneでのみ変更されている場合は、ここでグローバル変数を使用することもできます。

+0

こちらのページでは、チェックマークをクリックすることで、あなたは2つの評判ポイントを与えることができます。 – skrx

+0

グローバル変数についての注意点:通常、コードを理解、デバッグ、保守することを難しくする可能性があるため、グローバル変数を使用しないでください。この場合は1つの関数/メソッドでしか変更できないため、1つを使用することはできますが、個人的には最初の2つのオプションのいずれかを選択します。すべての問題に対して絶対にグローバルを使用しないように注意してください。 – skrx

関連する問題