Ho trovato la seguente implementazione di un algoritmo Flow in Python:
class Edge(object):
def __init__(self, u, v, w):
self.source = u
self.sink = v
self.capacity = w
def __repr__(self):
return "%s->%s:%s" % (self.source, self.sink, self.capacity)
lass FlowNetwork(object):
def __init__(self):
self.adj = {}
self.flow = {}
def add_vertex(self, vertex):
self.adj[vertex] = []
def get_edges(self, v):
return self.adj[v]
def add_edge(self, u, v, w=0):
if u == v:
raise ValueError("u == v")
edge = Edge(u,v,w)
redge = Edge(v,u,0)
edge.redge = redge
redge.redge = edge
self.adj[u].append(edge)
self.adj[v].append(redge)
self.flow[edge] = 0
self.flow[redge] = 0
Che è testato con:
>>> g = FlowNetwork()
>>> for v in "sopqrt":
>>> g.add_vertex(v)
>>> g.add_edge('s','o',3)
>>> g.add_edge('s','p',3)
Mi stavo chiedendo cosa esattamente questa parte:
edge.redge = redge
redge.redge = edge
fa nella funzione add_edge; è come una sorta di chiamata "ricorsiva" in cui un vantaggio riceve il valore di redge in uno dei suoi attributi, ma perché l'ultima riga di
redge.redge = bordo?
Sta mettendo il bordo nell'attributo redge di redge?
Per quello che so di altri linguaggi OOP, quando si mette un punto tra due elementi esso indica principalmente una relazione oggetto.attributo, ma non vedo come ciò sia realizzato in quella sezione.
Grazie