【发布时间】:2021-07-30 20:15:05
【问题描述】:
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__ 吗?我想我可以使用defaultdict的副本来复制图表。
复制类应该通过调用graph.copy()来创建图形的精确副本
例如。
g = Graph()
g['a']['b'] = 5
x = g.copy()
这将制作一个精确的副本,但我得到了上述错误
【问题讨论】:
-
对于初学者来说,你的
__missing__实现是错误的......它总是返回None这可能不是你想要的。 -
可能会更好??调用
super().copy()而不是直接调用魔术方法。 -
我这样做了,所以如果我尝试制作一个未加权的边缘,它的值会是 true。只是为了表明边缘存在但它没有重量,
-
我尝试了 super.copy() 并且得到了同样的错误 return super().copy() TypeError: __init__() 需要 1 个位置参数,但给出了 3 个
标签: python typeerror python-class