Graph类:TypeError:\uuuu init\uuuuu()接受1个位置参数,但给出了3个

2024-05-01 22:51:12 发布

您现在位置:Python中文网/ 问答频道 /正文

class _Edges(defaultdict):

    def __missing__(self, vertex):
        self.setdefault(vertex, True)

    def __delitem__(self, dst):
        self[dst] = False

    def del_vertex(self, dst):
        super().__delitem__(dst)

class Graph(defaultdict):

    def __init__(self):
        super().__init__(_Edges)
    
    def copy(self):
        return super().__copy__()

我试图编写一个生成图形的类,但是当我试图调用copy函数时,我得到了一个错误。我应该写我自己的__copy__吗?我想我可以使用defaultdict的副本来复制图形

copy类应该通过调用graph.copy()来创建图形的精确副本 前

g = Graph() 
g['a']['b'] = 5
x = g.copy()

这将使一个确切的副本,但我得到了上述错误,而不是


Tags: self图形initdef错误副本classgraph
1条回答
网友
1楼 · 发布于 2024-05-01 22:51:12

基于测试,我相当确定defaultdict__copy__实现将使用至少两个参数调用__init__on Graph

  • (a1);;及
  • 正在复制的对象

为了解决这个问题,您可以将Graph类修改为:

class Graph(defaultdict):
  def __init__(self, *args):
    if len(args) == 0:
      super().__init__(_Edges)
    else:
      super().__init__(*args)

因此,如果它作为复制操作的一部分被调用(当args包含一个值时),那么所有的值都将被简单地传递给defaultdict实现;但是如果args为空,则只使用default_factory参数调用defaultdict实现。在这个实现中,您可能不需要提供copy__copy__,因为默认为defaultdict提供的就足够了

相关问题 更多 >