ID de incremento automático para instancias de clase

Descargo de responsabilida: Esto es para un proyecto semestral en el que estoy trabajando actualmente. Mi pregunta es sobre un nivel de detalle de implementación y no forma parte del esquema de calificación. Solo estoy escribiendo este código como una forma de probar la teoría que propongo para el trabajo que escribiré.

Además, he considerado las respuestas paraesta pregunt con poca suerte, así que por favor no considere esto como un duplicado de esa pregunta

El problem:

Tengo un gráfico (G = (V, E)). En algún punto de mi algoritmo, necesito convertir esto en una hipergrafía (en cierto sentido) al "colapsar" múltiples nodos (por ejemplo,v_1, v_2, ..., v_n) en un nodo (digamos,v). En el contexto del problema, esto implica que necesito cambiar los bordes enE tal que cualquier bordee entre cualquiera dev_1, v_2, v_n y cualquier otro nodou inV será cambiado de tal manera quee ahora está entreu yv.

Para capturar que ahora puede haber múltiples aristas distintas entre cualquier par de nodos, necesito hacer un identificador único para cada arista. He intentado hacer esto mediante una ID, que actualmente no puedo implementar correctamente.

Esto es lo que he intentado:

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

Sin embargo, cuando intento crear una nueva ventaja, aparece el siguiente error:

>>> 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:

Con las sugerencias de algunas respuestas, he podido corregir el error de tiempo de instanciación. Sin embargo, otro error persiste. Aquí está mi código y los errores:

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

Error

>>> 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

Agradecería cualquier ayuda

Gracia

Respuestas a la pregunta(8)

Su respuesta a la pregunta