Conway's Game of Life in Python
This is excellent code for a Python novice.

To address your questions:


Rather than x and y, try naming your variables row and col.  Then it wouldn't feel unnatural to write self.state.board[row][col].
In my opinion, the .neighbour() function would be better in the State class, since you're counting neighbours of a cell within that state.
Your code is easy to understand, partly because the rules of the game are well known.  However, you should still write docstrings for your functions.  It's not obvious, for example, what to pass for the state parameter to the Game constructor unless you read the code.  (Should I pass a 2D array of booleans?)
You could use list comprehensions, but the current code is not bad either.
I would rename both of your display(self) functions to __str__(self).  In Game, that function would become

def __str__(self):
    return str(self.state)


Then you can just print my_game.