从 graph_tool 包中继承 Graph
Subclassing Graph from the graph_tool package
我正在尝试从 graph_tool
包中子 class Graph
以在 Python 中进行一些图形分析(以便我可以生成一些我自己的函数,但仍然使用 Graph_Tool 的函数),而且我似乎无法使用 graph_tool
的图形生成器方法。
我首先导入我的 classes:
import graph_tool.all as gt
import numpy.random as np
np.seed(42)
我试过各种版本的__init__
方法:
从头开始构建图表。这行得通,但我不想这样做
使用这个,因为 graph_tool
有一些很好的方法来预填充
你的图表(见下面的 2. 和 3.)。
class myGraph(gt.Graph):
def __init__(self):
super(myGraph, self).__init__()
self.add_vertex(4)
使用 graph_tool
图形生成器方法。这会在函数内部生成一个 gt.Graph
对象。但是当我尝试在函数外打印对象时,出现错误。
class myGraph(gt.Graph):
def __init__(self):
self = gt.collection.data['celegansneural']
print self
g = myGraph()
print g
上面的代码returns(注意第一行是我的`init方法中print self
的结果):
<Graph object, directed, with 297 vertices and 2359 edges at 0x1049d2a50>
Traceback (most recent call last): <br>
File "Graph_Tool.py", line 54, in <module> <br>
print g <br>
File "/usr/local/lib/python2.7/site-packages/graph_tool/__init__.py", line 1683, in __repr__ <br>
d = "directed" if self.is_directed() else "undirected" <br>
File "/usr/local/lib/python2.7/site-packages/graph_tool/__init__.py", line 2412, in is_directed <br>
return self.__graph.get_directed() <br>
AttributeError: 'myGraph' object has no attribute '_Graph__graph'
我的另一种方法是调用父对象的 __init__
,然后用新数据覆盖该对象。当我这样做时,只要我留在我的 __init__
方法中,一切看起来都很好,但一旦我离开它,我的图表就会被擦除。
class myGraph(gt.Graph):
def __init__(self):
super(myGraph, self).__init__()
self = gt.collection.data['celegansneural']
print self
g = myGraph()
print g
其中returns以下。注意第一个 print self
returns 一个填充的 Graph
对象,而第二个 print g
returns 一个空的 myGraph
对象
<Graph object, directed, with 297 vertices and 2359 edges at 0x11df610d0>
<myGraph object, directed, with 0 vertices and 0 edges at 0x109d14190>
如果这是 graph_tool
库的一些挑剔问题,我提前道歉,但我认为这更有可能是我的编码错误而不是他们的。
你通常应该更喜欢组合而不是继承——除非你想自定义图形的行为class本身,你不需要子classgt.Graph
,就当自己的一员吧class。然后,您可以将自己的方法添加到 class,并在需要时使用图表的方法:
class MyGraph(object):
def __init__(self, graph):
self.graph = graph
def do_stuff(self):
# do stuff with self.graph
# Usage:
my_graph = MyGraph(graph=gt.collection.whatever())
my_graph.do_stuff()
您似乎对 python 中赋值的工作方式有点困惑。但我想实现你想要的正确方法是用适当的参数调用父级的构造函数:
class myGraph(gt.Graph):
def __init__(self):
super(myGraph, self).__init__(gt.collection.data['celegansneural'])
g = myGraph()
print(g)
我正在尝试从 graph_tool
包中子 class Graph
以在 Python 中进行一些图形分析(以便我可以生成一些我自己的函数,但仍然使用 Graph_Tool 的函数),而且我似乎无法使用 graph_tool
的图形生成器方法。
我首先导入我的 classes:
import graph_tool.all as gt
import numpy.random as np
np.seed(42)
我试过各种版本的__init__
方法:
从头开始构建图表。这行得通,但我不想这样做 使用这个,因为
graph_tool
有一些很好的方法来预填充 你的图表(见下面的 2. 和 3.)。class myGraph(gt.Graph): def __init__(self): super(myGraph, self).__init__() self.add_vertex(4)
使用
graph_tool
图形生成器方法。这会在函数内部生成一个gt.Graph
对象。但是当我尝试在函数外打印对象时,出现错误。class myGraph(gt.Graph): def __init__(self): self = gt.collection.data['celegansneural'] print self g = myGraph() print g
上面的代码returns(注意第一行是我的`init方法中print self
的结果):
<Graph object, directed, with 297 vertices and 2359 edges at 0x1049d2a50>
Traceback (most recent call last): <br>
File "Graph_Tool.py", line 54, in <module> <br>
print g <br>
File "/usr/local/lib/python2.7/site-packages/graph_tool/__init__.py", line 1683, in __repr__ <br>
d = "directed" if self.is_directed() else "undirected" <br>
File "/usr/local/lib/python2.7/site-packages/graph_tool/__init__.py", line 2412, in is_directed <br>
return self.__graph.get_directed() <br>
AttributeError: 'myGraph' object has no attribute '_Graph__graph'
我的另一种方法是调用父对象的
__init__
,然后用新数据覆盖该对象。当我这样做时,只要我留在我的__init__
方法中,一切看起来都很好,但一旦我离开它,我的图表就会被擦除。class myGraph(gt.Graph): def __init__(self): super(myGraph, self).__init__() self = gt.collection.data['celegansneural'] print self g = myGraph() print g
其中returns以下。注意第一个 print self
returns 一个填充的 Graph
对象,而第二个 print g
returns 一个空的 myGraph
对象
<Graph object, directed, with 297 vertices and 2359 edges at 0x11df610d0>
<myGraph object, directed, with 0 vertices and 0 edges at 0x109d14190>
如果这是 graph_tool
库的一些挑剔问题,我提前道歉,但我认为这更有可能是我的编码错误而不是他们的。
你通常应该更喜欢组合而不是继承——除非你想自定义图形的行为class本身,你不需要子classgt.Graph
,就当自己的一员吧class。然后,您可以将自己的方法添加到 class,并在需要时使用图表的方法:
class MyGraph(object):
def __init__(self, graph):
self.graph = graph
def do_stuff(self):
# do stuff with self.graph
# Usage:
my_graph = MyGraph(graph=gt.collection.whatever())
my_graph.do_stuff()
您似乎对 python 中赋值的工作方式有点困惑。但我想实现你想要的正确方法是用适当的参数调用父级的构造函数:
class myGraph(gt.Graph):
def __init__(self):
super(myGraph, self).__init__(gt.collection.data['celegansneural'])
g = myGraph()
print(g)