我正在尝试使用其邻居的名称和dict创建一个节点类,以及它引用此邻居的标记(不一定是邻居的名称)。
class node:
def __init__(self,name='',neighbors={}):
self.name=name
self.neighbors=neighbors
def addNeighbor(self,neighborTag,neighbor):
if neighborTag not in self.neighbors.keys():
self.neighbors[neighborTag] = neighbor
但是当我执行以下操作时:
foo = node(name='foo')
foo.addNeighbor('fooneighbor',node(name='bar'))
dict条目{'fooneighbor',节点对象}也出现在foo.neighbors ['fooneighbor']。邻居(我希望是空白的)。
我猜这与我不知道的dicts如何工作有关。谁能开导我?
答案 0 :(得分:0)
引自docs,
在函数定义时计算默认参数值 执行。这意味着当表达式被评估一次 定义函数,并使用相同的“预先计算”值 每次通话。这对了解何时来说尤为重要 default参数是一个可变对象,例如列表或字典: 如果函数修改了对象(例如通过将项附加到a 列表),默认值实际上已修改。这通常不是 意图是什么。解决这个问题的方法是使用None作为默认值, 并在函数体中明确地测试它,例如:
def whats_on_the_telly(penguin=None): if penguin is None: penguin = [] penguin.append("property of the zoo") return penguin
所以,你可以解决你的问题,比如
def __init__(self,name='',neighbors=None):
self.name=name
if neighbors == None:
neighbors = dict()
self.neighbors=neighbors