Class 如何使用额外的方法在Sage中创建一个新的Graph类?

Class 如何使用额外的方法在Sage中创建一个新的Graph类?,class,inheritance,python,sage,Class,Inheritance,Python,Sage,我正在用Sage编写一些代码,用Feynman图进行一些计算,Feynman图是有限的、无方向的带边标签的多重图。我需要实现诸如边收缩之类的方法,这些方法在类sage.graphs.graph.graph中奇怪地缺失。但我也希望继承所有现有的图形方法,例如is_tree 下面是模块Feynman.sage的顶部,它应该附加新类 from sage.graphs.graph import Graph class FeynmanGraph(Graph): """An unoriented

我正在用Sage编写一些代码,用Feynman图进行一些计算,Feynman图是有限的、无方向的带边标签的多重图。我需要实现诸如边收缩之类的方法,这些方法在类
sage.graphs.graph.graph
中奇怪地缺失。但我也希望继承所有现有的图形方法,例如
is_tree

下面是模块Feynman.sage的顶部,它应该附加新类

from sage.graphs.graph import Graph

class FeynmanGraph(Graph):
    """An unoriented multi-graph with labeled edges"""
    def __init__(self, E=[]):
        self._edges = len(E)

    def __repr__(self):
        return 'A Feynman graph with ' + str(self._edges) + ' edges.'
我做得不对。尽管该类的实例化会产生正确的方法目录,但其中许多方法都不起作用,因为

'FeynmanGraph' object has no attribute '_backend'
我认为这与Sage只是其他图论包的Python包装器的方式有关


请告知。

您可能只是没有正确继承东西。请尝试在
\uuuu init\uuuu()的开头插入此命令。


嗨,萨米,你可能会更幸运地将你的问题发布在。(我只知道如何在Mathematica中做这样的事情:如果你原谅一些自我宣传的话,请看)此外,边收缩只是顶点合并的一个特例,只合并两个顶点,并保留多重性。因此,请参见中的
merge_顶点
(以及
is_树
)。最后,并非所有sage图形对象都只是其他包的包装。如果从边列表、邻接矩阵等中收缩图形,则默认情况下创建使用
SparseGraphBackend
DenseGraphBackend
的对象。Sage中的大部分图论内容是networkx,它是用PYTHON编程的图论包。
super().__init__()