A critic of Guido's blog on Python's lambda

David C. Ullrich ullrich at math.okstate.edu
Mon May 8 16:00:13 CEST 2006

On Mon, 08 May 2006 08:05:38 -0500, David C. Ullrich
<ullrich at math.okstate.edu> wrote:

>def acall(cell, value):
>  cell.owner.slots['b'].value = value + 1

Needing to say that sort of thing every time
you define a callback isn't very nice.
New and improved version:


class Cell:

  def __init__(self, name, owner, callback):
    self.name = name
    self.callback = callback
    self.owner = owner

  def onchange(self, value):
    self.value = value
    self.callback(self, value)

  def __setitem__(self, name, value):
    self.owner.slots[name].value = value

class Cells:

  def __init__(self):
    self.__dict__['slots'] = {}

  def __setattr__(self, name, value):

  def __getattr__(self, name):
    return self.slots[name].value

  def AddCell(self, name, callback):
    self.slots[name] = Cell(name, self, callback)


cells = Cells()

def acall(cell, value):
  cell['b'] = value + 1


def bcall(cell, value):
  cell['a'] = value - 1


cells.a = 42
print cells.a, cells.b
cells.b = 24
print cells.a, cells.b

#OR you could give Cell a __setattr__ so the above
#would be cell.a = value - 1. I think I like this
#version better; in applications I have in mind I
#might be iterating over lists of cell names.


David C. Ullrich

More information about the Python-list mailing list