I'll try to explain how it works.
First, this is run:
a_game = Game("central_corridor")
This calls Game.__init__("central_corridor").
In the __init__ method, self.start takes the value "central_corridor".
Then we go back to the main body. By now, we have a variable called a_game. This variable is in fact an instance of the class Game, and it has some properties, like a_game.start, a_game.quips, a_game.death(), etc.
Next, this is run:
a_game.play()
That calls the play() method in a_game. Not in Game, but in a_game. Thus, when the method is running, it has access, through the word self (which is treated like a regular argument), to all properties of a_game.
This is run next
next = self.start
self.start was defined in __init__(), and is equal to "central_corridor". So now, next is "central_corridor".
We enter the while True: loop, print some hypens, and call getattr().
getattr() takes at least two arguments. The first one is an intsance of an object, in this case self, and the second one is the name of an attribute of that instance. In this case "central_corridor".
So getattr looks for an attribute of self that is called "central_corridor", and it finds it, and returns it. Now, room is equal to self.central_corridor.
Next, next = room() is run. As room is currently equal to self.central_corridor, this:
next = self.central_corridor()
is actually run.
self.central_corridor() can return one of "death", "laser_weapon_armory" or "central_corridor". Let's say it returns "laser_weapon_armory". Now next is "laser_weapon_armory". We go back to the beginning of the loop. We print some hyphens again, get an attribute of self named "laser_weapon_armory", which happens to be self.laser_weapon_armory, and run it.
self.laser_weapon_armory can return "the_bridge" or "death". This time let's say it returns "death". Now next is "death". We go back to the beginning of the loop, print some hypens, get self.death, and run it.
All self.death does is print a random string from self.quips, and then exit(1). The exit function, which is from the sys module, does just that. It terminates the program.
And that's pretty much it. I hope this helped.
Good luck learning Python the hard way!