Если я вас правильно понимаю, вы хотите, чтобы экземпляры Enermy получили доступ к экземпляру Player
Есть 2 способа сделать это.Я использую второй метод atm в своих программах и планирую добавить первый метод.
Первый способ заключается в получении класса для экземпляра, а вызов метода класса позволяет получить этот экземпляр.
class Game:
instance = False
def __init__(self):
if self.__class__.instance:
raise RunTimeError("Game has already been initialized.") # RunTimeError might be a bad choice, but you get the point
self.__class__.instance = self
@classmethod
def getInstance(cls):
return cls.instance
##>>> g = Game()
##>>> g
##<__main__.Game instance at 0x02A429E0>
##>>> del g
##>>> Game.getInstance()
##<__main__.Game instance at 0x02A429E0>
##>>>
## Here you can have, in your enermy class, g = Game.getInstance(). And g.player will be able to access the player instance, and its properties
Второй способ - это то, с чем я работал.Это предполагает наличие класса Game, регулирующего ВСЕ в игре.Значение: все является переменной в игре.Кроме того, каждая переменная игры (например, игрок) будет иметь атрибут с именем game, который ссылается на экземпляр игры.
Пример:
class Player:
def __init__(self, game):
self.game = game
print self.game.enermy
class Game:
def __init__(self):
self.enermy = "Pretend I have an enermy object here"
self.player = Player(self)
##>>> g = Game()
##Pretend I have an enermy object here
##>>> g.player.game.enermy
##'Pretend I have an enermy object here'
##>>>
## Iin your enermy class, self.game.player will be able to access the player instance, and its properties
Некоторые могут возражать против наличияВо-вторых, я тоже вижу проблему с дополнительным шагом.Возможно, кто-то может пролить некоторый свет на сравнение между 2.
. Комбинированный метод может быть тем, на который я надеюсь перейти, однако возникает некоторая проблема, с которой вам нужно поставить первое вфайл, иначе вы можете получить Player не определен или Game не определен.Хотя я думаю, что это можно решить, разделив два класса на разные файлы.
class Player:
def __init__(self):
self.game = Game.getInstance()
class Game:
instance = False
def __init__(self):
if self.__class__.instance:
raise RunTimeError("Game has already been initialized.") # RunTimeError might be a bad choice, but you get the point
self.__class__.instance = self
@classmethod
def getInstance(cls):
return cls.instance