Tcl style traces

Peter Otten __peter__ at web.de
Wed Jan 28 08:35:01 EST 2004


Derek Fountain wrote:

> Does Python have something similar to Tcl style tracing? That is, the
> ability to call a subroutine when a variable is written to or read from?

Would it be sufficient to keep track of attribute changes? Then you could
try something like

class TraceChanges(object):
    def __init__(self, name, onChange):
        # bypass the tracking mechanism
        object.__setattr__(self, "name", name)
        object.__setattr__(self, "changed", onChange)

    def __setattr__(self, name, value):
        object.__setattr__(self, name, value)
        self.changed(self, name, value)


def changed(sender, name, value):
    # could also be a method of TraceChanges
    print "%s.%s changed to %s --> updating canvas" % (sender.name, name,
value)


rectangle = TraceChanges("rectangle", changed)
rectangle.color = "blue"

text = TraceChanges("text", changed)
text.color = "red"
text.font = "Helvetica"

Peter



More information about the Python-list mailing list