Quesion on class.attributes assignment

Terry Reedy tjreedy at udel.edu
Fri Jul 25 18:07:59 EDT 2008



John Hanks wrote:
> Hi,
> 
> I am reading a python program now but I just cannot understand how the 
> values of class attributes are assigned and changed. Here is the 
> original code url:
> http://agolb.blogspot.com/2006/01/sudoku-solver-in-python.html
> Here I am concerned is how attribute matrix.rows is changed. Through pdb 
> debugging, I can see in line 97, once "self.solutions = set((val,))" is 
> executed, cell.row and matrix.rows will be updated. But I did not see 
> any assignment codes here. How could this change happen then? Thanks a lot!

Newsreaders do not typically have line counters.  I presume you are 
referring to
     def setSolution(self, val):
         self.solved = True
         self.solutions = set((val,))
         self.matrix.changed = True
         for other in self.row+self.col+self.submatrix:
             if other is self: continue
             if other.solutions == self.solutions: raise DeadEnd()
             other.delSolutions(self.solutions)

First, self is an instance of the class, so these are all instance 
attributes, not class attributes.  The difference is important.

As to your question, the last line mutates (modifies, updates) each 
member of self.row, self.col, and self.submatrix that is not self 
itself.  The method delSolutions has the actual target rebindings.

tjr




More information about the Python-list mailing list