Differences between Class(Object) and Class(Dict) for dictionary usage?

Christopher Reimer christopher_reimer at icloud.com
Wed Apr 27 21:12:57 EDT 2016


On 4/26/2016 8:56 PM, Random832 wrote:
> what exactly do you mean by property decorators? If you're just 
> accessing them in a dictionary what's the benefit over having the 
> values be simple attributes rather than properties?

After considering the feedback I got for sanity checking my code, I've 
decided to simplify the base class for the chess pieces (see code 
below). All the variables are stored inside a dictionary with most 
values accessible through properties. A custom dictionary can be loaded 
through the constructor and or saved out through the fetch_state method. 
The subclasses only have to implement the is_move_valid method, which is 
different for each type of chess piece.
Thank you,
Chris R.
class Piece(object):
 def __init__(self, color, position, state=None):
 if state is None:
 self._state = {
 'class': self.__class__.__name__,
 'color': color,
 'first_move': True,
 'initial_position': position,
 'move_count': 0,
 'name': color.title() + ' ' + self.__class__.__name__,
 'notation': color.title()[:1] + 
self.__class__.__name__[:1],
 'position': position
 }
 else:
 self._state = state
 @property
 def color(self):
 return self._state['color']
 def fetch_state(self):
 return self._state
 def is_move_valid(self, new_position, board_state):
 raise NotImplementedError
 @property
 def move_count(self):
 return self._state['move_count']
 @property
 def name(self):
 return self._state['name']
 @property
 def notation(self):
 return self._state['notation']
 @property
 def position(self):
 return self._state['position']
 @position.setter
 def position(self, position):
 self._state['position'] = position
 if self._state['first_move']:
 self._state['first_move'] = False
 self._state['move_count'] += 1


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /