Simple card game to learn OOP
Syntax Error

In Cards.GetRandomCard(), the return statement is incorrectly indented.  (Also, I would recommend writing the return without parentheses.)

Style Conventions

Use lower_case_names for variables and methods.

For readability, please add one space after each comma, and one newline between functions definitions.

Modeling

Your Game class isn't useful.  You never set or use NameOfGame.  I recommend getting rid of the Game class altogether.

In a real-life card game, you would deal a card from the deck to each player, without replacement.  In your code, you deal with replacement (i.e., there is a chance of dealing the same card to both players).  A more realistic simulation would do a random.shuffle() on the array.  When dealing, you would pop() a card from the list to remove it from the deck.  51 is a "magic" number; you should use len(self.ActualCards) - 1.

Cards is really a Deck.  Rather than just a tuple of strings, you should have a Card class representing a single card.  The Card class should have a __str__() method that returns a string such as "Ace of diamonds".  If you also define comparison operators, then you can determine the winner using max(self.PlayerList, key=lambda player: player.CardForPlayer).

Expressiveness

In Python, you can usually avoid creating an empty list and appending to it:

self.ActualCards = [] #Empty List to Append
for Card in itertools.product(self.suits,self.values):
    self.ActualCards.append(Card) #Cartesian Product to Create Deck


Instead, you should be able to build it all at once:

self.actual_cards = list(itertools.product(self.suits, self.values))