Автоинкрементные идентификаторы для экземпляров классов
отказ: Это для семестрового проекта, над которым я сейчас работаю. Мой вопрос касается детализации уровня реализации и не является частью схемы оценки. Я пишу этот код только для того, чтобы проверить теорию, которую я предлагаю для статьи, которую я напишу.
Кроме того, я рассмотрел ответы наэтот вопрос без особой удачи, поэтому, пожалуйста, не рассматривайте это как дубликат этого вопроса
Проблема:
У меня есть график (G = (V, E)). В какой-то момент в моем алгоритме мне нужно превратить это в гиперграф (в некотором смысле), «свернув» несколько узлов (скажем,v_1, v_2, ..., v_n
) в один узел (скажем,v
). В контексте проблемы это означает, что мне нужно изменить края вE
такой, что любой крайe
между любым изv_1, v_2, v_n
и любой другой узелu
вV
будет изменено так, чтоe
сейчас междуu
а такжеv
.
Чтобы понять, что теперь может существовать несколько различных ребер между любой парой узлов, мне нужно сделать уникальный идентификатор для каждого ребра. Я попытался сделать это с помощью и ID, который в настоящее время я не могу правильно реализовать.
Это то что я пробовал:
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
Однако, когда я пытаюсь создать новое ребро, я получаю следующую ошибку:
>>> 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
РЕДАКТИРОВАТЬ:
С предложениями некоторых ответов я смог исправить ошибку времени инстанцирования. Тем не менее, еще одна ошибка сохраняется. Вот мой код и ошибки:
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
Ошибка:
>>> 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
Буду признателен за любую помощь
Спасибо