2017-11-29 26 views
1

게임 내내 얼마나 많은 플레이어가 플레이하기로 결정했는지를 알려주는 정적 클래스 속성 인 number_of_players를 보유하고 싶습니다.이 클래스는 클래스 전체에서 수정할 수 있습니다. 나는 number_of_players을 수정하려고 할 때할당 전에 로컬 변수가 참조됩니다. 플레이어 수에 대한 정적 클래스 속성

class SceneBase: 
    number_of_players = None 
#more code 

그러나, 자식 클래스에서, 내가 로컬 변수가 assingment 오류 전에 참조 받고 있어요 :

나는 나의 부모 클래스가 있습니다.

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은 절대 변경 및 반환 :

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 

하지만이 함께 있음을 실행하려고 할 때 같은 선수의 수를 초기화 시도 없음

내 선수 수를 수정하는 방법에 관해서 혼란스러워합니다. 모든 수업에서 수정할 수있는 방법이 있나요?

+2

클래스 멤버 속성을 수행하는 경우 'SceneBase.number_of_players' 하나처럼 액세스해야합니다. – user1767754

+0

인스턴스 변수를 사용해야하는 것처럼 들립니다. 특정 클래스 인스턴스의 디폴트 값을 오버라이드 (override)하기 위해서'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

BTW, 확인 표시를 클릭하여 도움이되는 질문을 올리십시오. – skrx

+0

전역 변수에 대한 한 가지주의 사항 : 코드를 이해하고 디버그하고 유지하는 것을 더 어렵게 만들 수 있으므로 보통 사용하지 않아야합니다. 이 경우 하나의 함수/메소드로만 수정되었으므로 개인적으로는 처음 두 옵션 중 하나를 선택합니다. 모든 문제에 대해 전역을 사용하지 않도록 조심하십시오. – skrx