首页 > 编程知识 正文

Python27 继承networkxDiGraph报错

时间:2023-05-06 19:21:40 阅读:272864 作者:4764

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





版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。