Graph-Tool: как получить доступ к свойствам?
Я хотел бы хранить экземпляры класса в графе графического инструмента, по одному объекту на узел (или "вершину", как их называет граф-инструмент). Я пытаюсь использовать свойство вершины, так как кажется, что это способ сделать это.
class MyClass(object):
def __init__(self, title):
self.title = title
graph = Graph()
my_obj = MyClass('some title')
vertex = graph.add_vertex()
vprop = graph.new_vertex_property('object')
vprop[vertex] = my_obj
Теперь я хотел бы прочитать мои объекты класса обратно, например, перебрать все узлы / вершины и распечатать их заголовки:
for vertex in self.graph.vertices():
# TODO: how to access titles ? this just prints
# "<Vertex object with index '0' at 0xb1e4bac>"
print repr(vertex) + '\n'
Кроме того, как я могу получить объект класса с определенным заголовком обратно из графика? Одним из способов является создание фильтра вершин с использованием graph.set_edge_filter(...)
и применить это - что кажется довольно дорогой операцией, учитывая, что все, что я хочу, это вернуть один единственный объект. Я действительно не хочу поддерживать свое собственное отображение заголовка объекта / индекса вершины как IMO, что является одной из задач графа.
Я что-то упустил здесь?
1 ответ
Чтобы получить доступ к значениям свойства, вы используете тот же синтаксис, который вы использовали для установки его значения, т. Е.
for vertex in graph.vertices():
print vprop[vertex].title
будет делать то, что вы хотите.
Если вы хотите получить вершины с заданным значением свойства, у вас нет другого выбора, кроме как искать его в графе. Помните, что значения свойств не обязательно должны быть уникальными, поэтому нет способа выполнить обратное сопоставление недорогим способом. Кроме того, для каждой карты свойств должно быть обратное отображение, которое было бы дорогостоящим с точки зрения памяти. Тем не менее, вы можете легко сделать это самостоятельно с dict
объект.