Когда вы вызываете Game("central_corridor")
, создается новый объект, и вызывается метод Game.__init__()
с этим новым объектом в качестве первого аргумента (self
) и "central_corridor"
в качестве второго аргумента. Поскольку вы написали a_game = Game(...)
, вы назначили a_game
для ссылки на этот новый объект.
Этот рисунок может облегчить понимание процесса:
Примечание: метод __new__
предоставляется Python. Создает новый объект класса, указанный в качестве первого аргумента. Встроенный метод __new__
ничего не делает с остальными аргументами. При необходимости вы можете переопределить метод __new__
и использовать другие аргументы.
Практическая причина наличия __init__()
в вашей программе - установить атрибут start
в экземпляре Game
, который вы создаете (тот, который вы вызываете a_game
), чтобы первый вызов a_game.play()
начинался в место, где вы хотите.
Ты прав насчет quips
. Нет никаких оснований для установки quips
в __init__()
. Вы можете просто сделать его атрибутом класса:
class Game(object):
quips = ["You died. Please try again.",
"You lost, better luck next time.",
"Things didn't work out well. You'll need to start over."
"You might need to improve your skills. Try again." ]
def __init__(self, start):
self.start = start