【发布时间】:2019-08-23 15:15:27
【问题描述】:
我正在 python 中实现一个基本的节点对象。基本上,我用 f_pointers 属性实现了一个节点类,并将其设置为默认值 []。当我尝试更改(比如说)node_a 的 f_pointers 时,我最终会更改 node_b 的 f_pointers ,它们被编程为完全不相关。
我已经通过将默认值更改为 None 并在 __init__ 中设置 forward_pointers 解决了这个问题。但是,我仍然想知道将来如何避免这个问题,并可能学习一些有关 Python 的新知识。
为了简单起见,我删除了代码中一些不必要的部分。
class Node:
def __init__(self, f_pointers = []):
self.f_pointers = f_pointers
def get_pointers(self):
return self.f_pointers
def add_pointers(self, new_pointer):
self.f_pointers.append(new_pointer)
a = Node()
b = Node()
print(a.get_pointers, b.get_pointers)
>>> [] []
a.add_pointers("a")
print(a.get_pointers, b.get_pointers)
>> ["a"] ["a"]
a.add_pointers("b")
print(a.get_pointers, b.get_pointers)
>> ["a","b"] ["a","b"]
可以看出,a和b是完全不相关的对象(除了它们是同一类型的Node)但会相互影响。为什么会这样?
【问题讨论】:
-
您的问题被称为“可变默认参数”。在我作为副本链接到的问题中阅读它。
标签: python class object arguments default