Tic-Tac-Toe in Python3
Design

I'm guessing you're coming from some sort of Object-Oriented Programming Language (OOPL), like Java. Python is an interpreted language, and while treating it like an OOPL isn't bad in many large scale scenarios, something small like this doesn't need that design. If this is for some kind of scholastic exercise or you're just training OOPL design in Python, you can stick to it, but personally I'd avoid it here.

Printing &amp; Strings

Pasting out each array index isn't necessary. Instead of using the modulo operator to format strings, you can either use .format() or f-strings. For the board prompt I'd personally use .format(), like so:

print(' {} | {} | {} \n===+===+===\n {} | {} | {} \n===+===+===\n {} | {} | {} \n'.format(*list(n for n in self.board)))


You use variadic assignment in three_in_row, so I'm assuming you know the four use cases of the asterisk.

I notice you use double quotes a lot in your main code but not in the actual main function, so maybe that was pregenerated by an editor like VSCode? Regardless, you can use single quotes more throughout your code.

Game &amp; Logic

None checks and usage seem to be quite frequent throughout this program. Again, this indicates to me some beginner OOP ideology. We all start somewhere, but as it is in good OOP design to not explicitly use null where possible, the same can apply to None here.

In your eval_board function, you prioritize the fourth, or central, spot for the AI.  Why not just check this outside of the loop, and then start it if it fails? This function appears to be used exclusively by the AI as well, so why isn't it named something like ai_move or ai_eval to reflect this? Other functions could benefit from this naming as well. Also, using while loops and checking for a None spot seems like a bad substitution for Boolean functions and checks in my mind.

Conveniently, I've also put up a Tic Tac Toe question, which is here: Back to Basics - Tic Tac Toe

Any comments I'd have on optimizing your game logic would just be incorporating some of the techniques used in my implementation. Granted, I don't have an "AI," but the imagination shouldn't need to flex over the available possibilities.