我发现了奇怪的 Python 行为(或者我可能不明白继承和/或属性的默认值是如何工作的)。
对于给定的代码
class A(object):
def __init__(self, s):
self.s = s
print "in init", self.s
class B(A):
def __init__(self, s = set()):
super(B, self).__init__(s)
print "after super", self.s
self.s.add('foo')
print '--------------'
if __name__ == "__main__":
a = B()
b = B()
我得到以下输出:
in init set([])
after super set([])
--------------
in init set(['foo']) # Why it has value set in other object?!
after super set(['foo'])
--------------
当然,期望的行为是使用空集在第二个对象 (b) 中初始化 self.s,但由于未知原因,它从前一个对象获取状态。为什么会这样?如何获得期望的行为?
谢谢!