Bill Atkins wrote: [snip] >>Here's how one of the cells examples might look in corrupted Python >>(this is definitely not executable): >> >> class FallingRock: >> def __init__(self, pos): >> define_slot( 'velocity', lambda: self.accel * self.elapsed ) >> define_slot( 'pos', lambda: self.accel * (self.elapsed ** 2) / 2, >> initial_position = cell_initial_value( 100 ) ) >> self.accel = -9.8 >> >> rock = FallingRock(100) >> print rock.accel, rock.velocity, rock.pos >> # -9.8, 0, 100 >> >> rock.elapsed = 1 >> print rock.accel, rock.velocity, rock.pos >> # -9.8, -9.8, -9.8 >> >> rock.elapsed = 8 >> print rock.accel, rock.velocity, rock.pos >> # -9.8, -78.4, -627.2 >> >>Make sense? The idea is to declare what a slot's value represents >>(with code) and then to stop worrying about keeping different things >>synchronized. >> >>Here's another of the examples, also translated into my horrific >>rendition of Python (forgive me): >> >> class Menu: >> def __init__(self): >> define_slot( 'enabled', >> lambda: focused_object( self ).__class__ == TextEntry and >> focused_object( self ).selection ) >> >>Now whenever the enabled slot is accessed, it will be calculated based >>on what object has the focus. Again, it frees the programmer from >>having to keep these different dependencies updated. >> >>-- >>This is a song that took me ten years to live and two years to write. >> - Bob Dylan > > > Oh dear, there were a few typos: > > class FallingRock: > def __init__(self, pos): > define_slot( 'velocity', lambda: self.accel * self.elapsed ) > define_slot( 'pos', lambda: self.accel * (self.elapsed ** 2) / 2, > initial_value = cell_initial_value( 100 ) ) > self.accel = -9.8 > > rock = FallingRock(100) > print rock.accel, rock.velocity, rock.pos > # -9.8, 0, 100 > > rock.elapsed = 1 > print rock.accel, rock.velocity, rock.pos > # -9.8, -9.8, 90.2 > > rock.elapsed = 8 > print rock.accel, rock.velocity, rock.pos > # -9.8, -78.4, -527.2 >
you mean something like this? (and yes, this is executable python): class FallingRock(object): def __init__(self, startpos): self.startpos = startpos self.elapsed = 0 self.accel = -9.8 velocity = property(lambda self: self.accel * self.elapsed) pos = property(lambda self: self.startpos + self.accel * (self.elapsed ** 2) / 2) rock = FallingRock(100) print rock.accel, rock.velocity, rock.pos # -9.8, 0, 100 rock.elapsed = 1 print rock.accel, rock.velocity, rock.pos # -9.8, -9.8, 95.1 rock.elapsed = 8 print rock.accel, rock.velocity, rock.pos # -9.8, -78.4, -213.6 Cheers, Carl Friedrich Bolz -- http://mail.python.org/mailman/listinfo/python-list