2012-03-02 6 views
4

Я хотел бы хранить экземпляры класса в графе graph-tool, по одному объекту на узел (или 'vertex', как их называет графический инструмент). Я пытаюсь использовать свойство вершины, поскольку это похоже на way to do this.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, это одна из задач графика.

Я пропустил что-то фундаментальное здесь?

ответ

4

Для того, чтобы получить доступ к значениям свойств, можно использовать тот же синтаксис, использованный для установки его значения, то есть,

for vertex in graph.vertices(): 
     print vprop[vertex].title 

будет делать то, что вы хотите.

Если вы хотите получить вершины с заданным значением свойства, у вас нет опции, кроме как искать его на графике. Помните, что значения свойств не обязательно должны быть уникальными, поэтому нет возможности выполнить обратное сопоставление недорогим способом. Кроме того, для каждой карты свойств должно быть обратное отображение, которое будет дорогостоящим по памяти. Однако вы можете легко сделать это самостоятельно с помощью объекта dict.

Смежные вопросы