[Tutor] Confused about __setitem__

Jim Hodgen jhodgen at asymmetricsupplychain.com
Thu Dec 4 07:21:45 CET 2008


I am learning Python with a  minesweeper-engine project.  Future 
activities turn my attention to exploring the use of dictionaries as 
sparse matrices, hence the representation of the gameboard.  
Why can't I fill the dictionary-as-a-matrix with an instance of class 
Square?  Why do I need a custom method to make the assignment?  What am 
I not understanding?

*_# basics module (mineswobj1)contents..._*
class Square:
    mined = True              # False if empty, True if mined, no other 
values allowed
    marked = 0                # False if 0, marked-as-mined if 1, 
marked-as-unknown if 2, no other values allowed
    displaystate = 0         # covered if 0, marked if 1, exposed if 2, 
selected if 3, no other values allowed
    minedneighbors = 0  # number of mined neighboring squares, max legit 
value = 8
 
class Baseboard:
    xdimension = 0           # x-dimension of the gameboard, integer 
value greater than 0
    ydimension = 0          # y-dimension of the gameboard, integer 
value greater than 0
    minenumber = 0        # number of mines on the board for play, value 
from 0 to (xdimension * ydimension)
    state = 0                   # playable if 0, not-playable-exploded 
if 1, not-playable-solved if 2
    boardsquares = {}   # dictionary used to emulate an addressable 2 
dimensional grid where an instance of class Square
                                   # is inserted with a key consisting 
of a tuple describing its zero-based address in the grid

def initializeboard(xdim, ydim, minenum):
    gameboard = Baseboard()
    for yct in range(ydim):
        for xct in range(xdim):
            gameboard[(xct,yct)] = Square()
            print 'gameboard[(',xct,yct, ')] =', gameboard[(xct,yct)]

*_# driver module contents_*
import basics

mineswobj1.initializeboard(3, 4, 5)

_*#error message*_
Traceback (most recent call last):
  File "C:\jmh\Python\minedriver0.py", line 6, in <module>
    mineswobj1.initializeboard(3, 4, 5)
  File "C:\jmh\Python\mineswobj1.py", line 26, in initializeboard
    gameboard[(xct,yct)] = Square()
AttributeError: Baseboard instance has no attribute '__setitem__'
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20081203/95803c71/attachment.htm>


More information about the Tutor mailing list