Заданный ориентированный сетевой график. Я хотел бы иметь функцию, например «abc()
», для каждого узла, который удален из графика. Я просмотрел документацию networkx, но не нашел такой функции обратного вызова.Обратный вызов удаления/удаления узла Networkx
То, что я считал:
- Добавление вызова
abc()
к (Разрушитель) метод__del__()
объекта, связанного с узлом. Тем не менее, помимо ловушек использования__del__()
(см., Например, here), это не работает, если какие-либо ссылки на объект узла существуют где-то в памяти. - Подкласс класса
networkx.DiGraph()
и переопределение метода remove_node(). Недостаток: для этого потребуется переопределить все методы, удаляющие узел, например.remove_nodes_from
(есть ли еще?) - Поскольку реализация графика gridx основана на словарях, это может быть решением как-то «подключить» функцию
del
этого словаря. Однако вмешательство этого в сетевую систему кажется неуместным.
Что является самым простым способом реализации функции обратного вызова, которая вызывается каждый раз, когда удаляется узел networkx?
Вам просто нужно настроить два метода на подкласс: DiGraph.remove_node() и DiGraph_remove_nodes_from(). Взгляните на https://github.com/networkx/networkx/blob/master/examples/subclass/printgraph.py. Я думаю, что это в основном то, что вы хотите. – Aric
Итак, вы предлагаете второй из указанных выше вариантов. Это имеет смысл, поскольку я ошибался, полагая, что удаление ребер может удалить узлы. Если есть только две две функции, которые удаляют узлы, это, вероятно, лучший подход. В настоящий момент я не могу принять ваш ответ, поскольку это комментарий. Не могли бы вы перевести его в ответ? – stackoverflowwww