Consider the following class: class Node(object): def __init__(self, name, parent=None): self.name = name self.parent = parent
def _ancestors(self, ants=None): if ants is None: ants = [] else: ants.insert(0, self.name) if self.parent is None: return ants return self.parent._ancestors(ants) ancestors = property(_ancestors) The ancestor property generates a list ancestor nodes by having each parent examine its own name recursively. The recursion is managed by calling the method underlying the parent property, rather than calling the property directly. Is it possible to rewrite this property using decorator syntax? Does the @property decorator create some underlying method that I can call directly? Alternately, perhaps there is a way to rewrite the recursion so that such a call is unnecessary? Note that the property should not add its own name if it is the originating node (the node trying to find _its_ ancestors). So something like this didn't work for me: @property def ancestors(self): if self.parent is None: return [self.name] return [self.name] + self.parent.ancestors In other words, since there is no longer a list passing from child to parent during the recursion, is there a graceful way to examine the state of the ancestor list so far? Thanks, Jeffrey -- http://mail.python.org/mailman/listinfo/python-list