Tic Tac Toe algorithm using itertools
TTT is not a clear name, TicTacToe is only 6 characters more, and much clearer.

You should have winning_matrix be a constant, defined just inside the class declaration:

class TicTacToe:
    WINNING_MATRIX = ((0,1,2), (3,4,5), (6,7,8), (0,3,6), (1,4,7), (2,5,8), (0,4,8), (2,4,6))


Indexing a literal is odd to see, you should declare the constant ICONS and index that.

ICONS = ['.', 'O', 'X']

...

print ICONS[grid[square]],


I personally prefer using print('\n') to make it more clear what's happening as it can look funny to see just a print. You also shouldn't use an inline if as they're very easy to misread.

if square % 3 == 0: print
print ['.', 'O', 'X'][grid[square]],


The above looks like the if is meant to apply to the print call beneath it, but has an indentation error. Even when you spot the print, it seems like that was put there accidentally because it doesn't seem to print anything.

if square % 3 == 0:
    print('\n')
print(ICONS[grid[square]])


Also, instead of iterating over numbers and using those to index you should iterate over grid itself. You need the index of the values to detect when to print a new line, but you can still do this using enumerate.

for index, square in enumerate(grid):
    if index % 3 == 0:
        print('\n')
    print(ICONS[square])


This is much simpler than a double index. Plus, if you were to change the size of grid for any reason, you'd then be able to handle it just fine. The one last change, particularly in that case, could be to replace the 3 with a constant like ROW_WIDTH.

You could also make functions a lot clearer, like this:

def winner_is(self, total):
    '''Establishes which player wins in current node'''
    return total/3 if abs(total)==3 else 0


Your docstring is vague, and more abstract than it should be. Tell me what the function does, not what it's for.

def winner_is(self, total):
    '''Returns -1 or 1 to indicate which player won, or 0 for a tie.'''


However what's odd is that you're doubling down on your check for if the total is 3? You're calling self.winner_is when you've already determined that the total is three, or when it's definitely a tie. I'd combine the functions into one:

def check_game(self, grid):
    '''Returns -1 or 1 to indicate which player won, or 0 for a tie.'''

    for row in self.winning_matrix:
        total = sum([grid[x] for x in row])
        if abs(total) == 3: 
            return total / 3
    return 0


Now it's much simpler and contained, but still does exactly the same. I'd also consider renaming this, as it's unclear what a check would do, or what aspect of the game it applies to. eval_winner could improve the clarity.