Networkx是什么不再赘述
现希望继承Networkx,以实现功能扩展。Windows7 Python2.7 32bit
实现过程中出现问题
问题1
class CFG(nx):
def __init__(self, arg1=None, arg2=None, arg3=False ):
super(nx, self).__init__()
报错:
TypeError:Error when calling the metaclass bases module.__init__() takes at most 2 arguments(3 given)
解决:
Type(nx) -> module
而要继承的是类,所以需要改为
class CFG(nx.DiGraph):
def __init__(self, arg1=None, arg2=None, arg3=False ):
super(nx.DiGraph, self).__init__()
问题2
x = nx.DiGraph()
y = CFG()
len(dir(x)) -> 87
len(dir(y)) -> 85
竟然少了两个成员:succ和pred
以至于当y.add_edge(1,2)时报错:CFG中没有succ成员
解决:
哪里出错了?仔细检查代码,发现,犯了一个非常低级的错误
super(nx.DiGraph, self).__init__()
这句话实际上调用的是nx.DiGraph的父类的“构造函数”,即Graph的构造函数
自然DiGraph在Graph的基础上扩展的成员和方法都不在CFG中。
可能是早上起早了,脑子不太清楚
改正:
class CFG(nx.DiGraph):
def __init__(self, arg1=None, arg2=None, arg3=False ):
super(CFG, self).__init__()
OK,so much