如何实例化和扩展 Python igraph Vertex class

How to instantiate and extend Python igraph Vertex class

我想用模拟研究所需的一些额外变量方法扩展 igraph Vertex class。但是,当我尝试导入和扩展顶点 class 时,出现错误。

from igraph import Vertex

v = Vertex()

TypeError: cannot create 'igraph.Vertex' instances

同样,当我尝试扩展 class.

时也会出现同样的错误
from igraph import Vertex

class MyVertex(Vertex):

    def __init__(self):
        super().__init__()

my_vertex = MyVertex()

TypeError: cannot create 'MyVertex' instances

如何实例化 igraph 顶点并扩展 igraph 顶点 class?

Vertex 个实例并不意味着被实例化;这是故意的。 Vertex 只是对图形引用和顶点索引的包装,它提供了一些方便的方法,这些方法通常只是关联图形实例上相同方法的代理。即使您创建了自己的 Vertex subclass,目前也没有办法告诉 igraph Graph 对象开始返回您的 Vertex subclass 表达式喜欢 graph.vs[x] 而不是 Vertex 本身。

如果你想创建自己的 vertex-like classes,你可以尝试组合而不是继承,即你创建一个 MyVertex class 需要 Vertex 作为其构造函数参数,存储顶点,然后将方法调用转发给它,具体取决于您需要在自己的 MyVertex 实例中支持的内容:

class MyVertex:
    def __init__(self, v):
        self._v = v

    def degree(self, *args, **kwds):
        return self._v.degree(*args, **kwds)
    
    ...

请注意,由于 Vertex 实例只是图形和顶点 ID 的包装器,如果您从图形中删除顶点,事情会变得混乱,因为剩余的顶点由底层 C re-indexed库以确保它们的 ID 始终在 [0; n-1] 代表 n 个顶点。