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()
这将使一个确切的副本,但我得到了上述错误,而不是
基于测试,我相当确定
defaultdict
的__copy__
实现将使用至少两个参数调用__init__
onGraph
:为了解决这个问题,您可以将
Graph
类修改为:因此,如果它作为复制操作的一部分被调用(当
args
包含一个值时),那么所有的值都将被简单地传递给defaultdict
实现;但是如果args
为空,则只使用default_factory
参数调用defaultdict
实现。在这个实现中,您可能不需要提供copy
或__copy__
,因为默认为defaultdict
提供的就足够了相关问题 更多 >
编程相关推荐