title: Is there a design pattern for this: hide certain methods from certain classes
body: <p>I'm writing a simulation in Python for a dice game, and am trying to find the best way to handle the following situation in an Object Oriented manner.</p>
  
  <p>I have a Dice class that handles rolling the dice and reporting things about the dice.  This class's methods include a <code>roll()</code> method which modifies the dice values, and various reporting methods that describe the state of the dice, such as <code>have_n_of_a_kind()</code>, <code>is_scoring_combination()</code>, and <code>get_roll_value()</code>.</p>
  
  <p>There are two classes which make use of this Dice class.  The Player, controlled directly by a human, is untrusted to always make legal moves.  There is also a Turn class which enforces the rules of the game.</p>
  
  <p>So then, both the Player and Turn class need to be able to ask the Dice about its values by calling the state describing methods, but the Player cannot be allowed to directly call the <code>roll()</code> method, because the human Player might roll when it is not supposed to.</p>
  
  <p>Is there a good way for me to allow the Turn class to call a Dice object's <code>roll()</code> method but not allow a Player to do so?</p>