On Nov 12, 3:25 pm, "[EMAIL PROTECTED]" <[EMAIL PROTECTED]> wrote: > Hi, > > I have recently been learning python, and coming from a java > background there are many new ways of doing things that I am only just > getting to grips with. > > I wondered if anyone could take a look at a few pieces of code I have > written to see if there are any places where I am still using java- > esque techniques, and letting me know the appropriate python way of > doing things. > > Here is a node class I wrote for use in graph traversal algorithms: > > #==== > > class Node: > """ > Node models a single piece of connected data. > > Author: Peter Braden > Last Modified : Nov. '07 > """ > > def __init__(self, connections = None, uid = None): > """ > Args: > [connections - a list of (connected node, weight) > tuples. ] > [uid - an identifier for comparisons.] > """ > self._connected = [] > self._weights = [] > > if connections: > for i in connections: > self.connected.append(i[0]) > self.weights.append(i[1]) > > if not uid: > self.id = id(self) > else: > self.id = uid > > def __eq__(self, other): > return self.id == other.id > > def getConnected(self): > return self._connected > > def getWeights(self): > return self._weights > > def getConnections(self): > connections = [] > for i in range(len(connected)): > > connections.append((self._connected[i],self._weight[i])) > return connections > > connected = property(getConnected, None) > weights = property (getWeights, None) > connections = property(getConnections, None) > > def addConnection(self, node, weight = 0): > self.connected.append(node) > self.weights.append(weight) > > def removeConnection(self, node): > i = self._connected.index(node) > del self._connected[i] > del self._weights[i]
There's no reason to make 'connected' and 'weights' properties: just use them directly. Make 'connections' default to [] rather than None, and replace the slightly clumsy initialisation with more direct code: self.connected = [i[0] for i in connections] self.weights = [i[1] for i in connections] getConnections can be much simpler... def getConnections(self): return zip(self.connected, self.weights) The 'uid' business makes me suspicious: what's it for? If you need it, you probably need to initialise with an explicit test for None rather than just 'if uid' which will be wrong if you use a uid of 0... self.id = uid if uid is not None else id(self) HTH -- Paul Hankin -- http://mail.python.org/mailman/listinfo/python-list