[Python-ideas] Introduce collections.Reiterable

Chris Angelico rosuav at gmail.com
Thu Sep 19 13:52:02 CEST 2013


On Thu, Sep 19, 2013 at 8:39 PM, Neil Girdhar <mistersheik at gmail.com> wrote:
> That was just for illustration.  Here's the code I just fixed to use
> Reiterable:
>
> class Network:
>     def update(self, nodes):
>         nodes = Reiterable(nodes)
>         super().update(self, nodes)
>         for node in nodes:
>             node.setParent(self)
>             node.propertyValuesChanged.connect(self.modelPropertiesChanged)
>         self.modelNodesAddedRemoved.emit()

Hmm. As an alternative to reiterable, can you rejig the design
something like this?

class Network(...):
    def update(self,nodes):
        for node in nodes: self._update(node)
        self.modelNodesAddedRemoved.emit()
    def _update(self,node):
        super()._update(self,node)
        node.setParent(self)
        node.propertyValuesChanged.connect(self.modelPropertiesChanged)

You put update() into the highest appropriate place in the class
hierarchy, and then each subclass simply overrides _update to do the
work. That way, you iterate over nodes exactly once, and every point
in the hierarchy gets to do its own _update.

ChrisA


More information about the Python-ideas mailing list