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 объект.

Другие вопросы по тегам