私は次のことに気づいています:
class c:
def __init__(self, data=[]):
self._data=data
a=c()
b=c()
a._data.append(1)
print b._data
[1]
これは正しい動作ですか?
私は次のことに気づいています:
class c:
def __init__(self, data=[]):
self._data=data
a=c()
b=c()
a._data.append(1)
print b._data
[1]
これは正しい動作ですか?
はい、正しい動作です。
しかし、あなたの質問から、それはあなたが期待したものではないようです。
期待に応えたい場合は、次の点に注意してください。
ルール 1. 変更可能なオブジェクトをデフォルト値として使用しないでください。
def anyFunction( arg=[] ):
新しいリスト オブジェクトを作成しません。のデフォルトのリスト オブジェクトは、arg
すべての場所で共有されます。
同様に
def anyFunction( arg={} ):
新しい dict オブジェクトを作成しません。このデフォルトの辞書は共有されます。
class MyClass( object ):
def __init__( self, arg= None ):
self.myList= [] if arg is None else arg
これは、新しい空のリスト オブジェクトである既定の引数値を提供する一般的な方法です。
これは古典的な落とし穴です。http://zephyrfalcon.org/labs/python_pitfalls.htmlのセクション 5:「変更可能なデフォルト引数」を参照してください。
次に、常に次のような関数を作成します。
def __init__ ( self, data = None ):
if data is None:
data = []
self._data = data
または、 を使用することもできますが、これにより、ユーザーが空のパラメーター ( 、など)をdata = data or []
渡すことができなくなります。''
0
False