IDs de incremento automático para instâncias de classe
Aviso Lega: Trata-se de um projeto semestral no qual estou trabalhando atualmente. Minha pergunta é sobre um nível de implementação e não faz parte do esquema de classificação. Estou escrevendo este código apenas como uma maneira de testar a teoria que estou propondo para o artigo que vou escreve
Também considerei as respostas paraessa questã com pouca sorte, então não considere isso como uma duplicata dessa pergunta
O problem:
Tenho um gráfico (G = (V, E)). Em algum momento do meu algoritmo, preciso transformar isso em um hipergrafo (de certo modo) "recolhendo" vários nós (por exemplo,v_1, v_2, ..., v_n
) em um nó (digamos,v
). No contexto do problema, isso implica que eu preciso alterar as arestas emE
tal que qualquer bordae
entre qualquer um dev_1, v_2, v_n
e qualquer outro nóu
dentroV
será alterado de modo quee
agora está entreu
ev
.
Para capturar que agora podem existir várias arestas distintas entre qualquer par de nós, preciso criar um identificador exclusivo para cada aresta. Tentei fazer isso por meio de e ID, que atualmente não consigo implementar adequadamente.
Isto é o que eu tentei:
class Edge:
_ID = 0
def __init__(self, u, v, w, c,f=0):
self.id = Edge._ID
Edge._ID += 1
self.src = u
self.dest = v
self.weight = w
self.capacity = c
self.flow = f
o entanto, quando tento instanciar uma nova borda, recebo o seguinte erro:
>>> e = Edge(1,3,5,10,0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "UnsplittableFlow.py", line 14, in __init__
self.id = Edge._ID; Edge._ID += 1
UnboundLocalError: local variable '_ID' referenced before assignment
EDITA:
Com as sugestões de algumas respostas, consegui corrigir o erro de instanciação. No entanto, outro erro persiste. Aqui está o meu código e os erros:
class Edge:
_ID = 0
def __init__(self, u, v, w, c,f=0):
self.id = self._ID; self._ID += 1
self.src = u
self.dest = v
self.weight = w
self.capacity = c
self.flow = f
Erro
>>> e = Edge(1,3,5,10,0)
>>> e.id
0
>>> Edge._ID
0
>>> f = Edge(2,3,5,10,0)
>>> f.id
0
>>> Edge._ID
0
Eu apreciaria qualquer ajuda
Obrigad