同じクラスのオブジェクトへの変数の再割り当てが以前のデータを保持しないようにするにはどうすればよいですか?

ライアン・マトックス

空の辞書が割り当てられるBox代わりに、の新しいインスタンスでボックスを再割り当てself.thingsすると、前のインスタンスと同じデータが含まれます。

私はPython3.7.3を使用しています

import random

class Box:
    def __init__(self, things = {}):
        self.things = things

    def __str__(self):
        return str(self.things)

    def put_thing_in_location(self, thing, location):
        self.things[location] = thing


for i in range(2):
    box = Box()
    print(box)
    box.put_thing_in_location(
        random.randrange(10000), 
        random.randrange(10000)
    )

出力:

$ python bugTest.py

{}

{652: 8968}

引数が渡されない場合things、の新しいインスタンスはBox空の辞書なると思います代わりにthings、の前のインスタンスから保持しますBox

donkopotamus

問題は、デフォルトとまったく同じ辞書をインスタンスに割り当てているため、すべてのインスタンスで共有していることです。コンストラクターをに変更します

def __init__(self, things=None):
    self.things = {} if things is None else things

これにより、何も指定されていない場合、各インスタンスがデフォルトとして新しい辞書を使用するようになります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ