您的位置:首页 > 编程语言 > Python开发

Python2.7 继承networkx.DiGraph报错

2018-02-14 10:33 288 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: