2014-12-11 3 views
2

У меня есть игра Имя класса. В методе __init__ я присвоил каждому экземпляру 3 атрибута:Python: экземпляр не имеет атрибута 5

class Game: 
     def __init__(self): 
      self.__players = [] 
      self.__num_of_players = 0 
      self.__lop = LOP() 

Теперь в моей основной метод я сделать следующее:

for player in game.__players: 
    ... 

И я получаю следующее сообщение об ошибке:

AttributeError: Game instance has no attribute '__players' 
+1

См. Https://www.python.org/dev/peps/pep-0008/#method-names-and-instance-variables - использование символов подчеркивания имеет условное значение i n Python. – jonrsharpe

ответ

3

используя __ mangles the name класса в названии атрибута, вам нужно будет получить к нему доступ, например:

for player in game._Game__players: 
    ... 

, но если вы собираетесь, чтобы он был доступен за пределами класса, то не используйте ведущий __

В качестве альтернативы вы можете разоблачить __players через property

class Game: 
    def __init__(self): 
     self.__players = [] 
     self.__num_of_players = 0 
     self.__lop = LOP() 

    @property 
    def players(self): 
     return self.__players 

затем

for player in game.players: 
    ... 
+0

Спасибо! Я только хотел иметь хороший стиль кодирования ... :( – Daniella

+0

@ Daniella, начинающийся с одного подчеркивания, не приводит к какому-либо искажению, но он сигнализирует другим программистам, что они не должны использовать этот атрибут вне класса Если вы хотите, чтобы люди использовали этот атрибут напрямую, просто не префикс его, и вы будете в порядке –

+0

Спасибо. Получил – Daniella

Смежные вопросы