好的,所以这让我整天疯狂.
为什么会这样:
class Foo:
def __init__(self, bla = {}):
self.task_defs = bla
def __str__(self):
return ''.join(str(self.task_defs))
a = Foo()
b = Foo()
a.task_defs['BAR'] = 1
print 'B is ==> %s' % str(b)
print 'A is ==> %s' % str(a)
Run Code Online (Sandbox Code Playgroud)
给我输出:
B is ==> {'BAR': 1}
A is ==> {'BAR': 1}
Run Code Online (Sandbox Code Playgroud)
我知道它与python通过引用传递所有内容有关.
但为什么会这样呢?这实际上让我一整天都疯了,基本上让我把我的东西拆开了.难道python不应该足够聪明来处理这样的事情吗?
由于您bla最初在参数中设置了一个可变类型(在本例中为dict),因此它bla不会被重新初始化为每个为其创建的实例的新dict实例Foo.在这里,试试这个:
class Foo:
def __init__(self, bla=None):
if bla is None:
bla = {}
self.task_defs = bla
def __str__(self):
return ''.join(str(self.task_defs))
a = Foo()
b = Foo()
a.task_defs['BAR'] = 1
print 'B is ==> %s' % str(b)
print 'A is ==> %s' % str(a)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |