这真的很奇怪 - 我有11个标签被传递到LabelTree
。我第一次打电话给sort_by_hierarchy
,一切都很好。
我刷新页面,AJAX调用被调用以调用此函数,然后返回22个标签。我再次刷新页面,44个标签。
我做错了什么?
class LabelTree:
def __init__(self, labels):
self.by_parent = {}
self.by_id = {}
for label in labels:
parent_id = 0 if label.parent_id is None else label.parent_id
if parent_id not in self.by_parent:
self.by_parent[parent_id] = []
self.by_parent[parent_id].append(label)
self.by_id[label.id] = label
def sort_by_hierarchy(self, parent_id=0, depth=0, hierarchical_labels=[]):
if parent_id not in self.by_parent:
return hierarchical_labels
labels = self.by_parent[parent_id]
for label in labels:
label.depth = depth
hierarchical_labels.append(label)
hierarchical_labels = self.sort_by_hierarchy(label.id, depth+4, hierarchical_labels)
return hierarchical_labels
答案 0 :(得分:2)
问题在于:
def sort_by_hierarchy(self, parent_id=0, depth=0, hierarchical_labels=[]):
永远不要创建具有[]
或{}
等默认值的参数,因为列表或dict只会创建一次,并且下一次调用方法将具有修改后的版本(前面带有标签)该列表是hierarchical_labels
的默认值
请改用这个习语:
def sort_by_hierarchy(self, parent_id=0, depth=0, hierarchical_labels=None):
if hierarchical_labels is None:
hierarchical_labels = []