関連する注意事項として、近いうちに見られる可能性のあるこの落とし穴に注意する必要があります。
class A:
def __init__(self, mylist = []):
self.mylist = mylist
a = A()
a2 = A()
a.mylist.append(3)
print b.mylist #prints [3] ???
これは多くの人々を混乱させ、コードがどのように解釈されるかに関係しています。Pythonは実際には最初に関数の見出しを解釈するため、__init__(self, mylist = [])
そのリストへの参照をデフォルトのパラメーターとして評価して保存します。つまり、Aのすべてのインスタンスは(独自のリストが提供されていない限り)元のリストを参照します。そのようなことをするための正しいコードは
class A:
def __init__(self, mylist=None):
if mylist:
self.mylist = mylist
else:
self.mylist = []
または、より短い式が必要な場合は、3項構文を使用できます。
self.mylist = mylist if mylist else []