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'])
--------------
もちろん、望ましい動作は、2 番目のオブジェクト (b) の self.s を空のセットで初期化することですが、理由は不明ですが、前のオブジェクトから状態を取得します。なぜそれが起こるのですか?望ましい動作を取得する方法は?
ありがとう!