わかりました。この質問を1つの簡潔なフレーズで表現する方法がよくわかりません。そのため、modがより適切なタイトルを思い付く可能性がある場合は、修正してください。
したがって、モジュール「testModule.py」があるとします。
# testModule.py
data = {'x': 1, 'y': 2, 'z': 3}
class A:
def __init__(self):
pass
class B(A):
def __init__(self):
self.classData = data
class C(B):
def __init__(self):
B.__init__(self)
self.classData = {'x': 2, 'y': 2, 'z': 3}
testModuleをファイル「test.py」にインポートします
# test.py
import testModule
b = testModule.B()
c = testModule.C()
print test.data
print b.classData
print c.classData
test.pyを実行すると、次のようになります。
{'x': 1, 'y': 2, 'z': 3}
{'x': 1, 'y': 2, 'z': 3}
{'x': 2, 'y': 2, 'z': 3}
それは期待された、素晴らしい、そしてダンディです...
ただし、testModuleのクラスCを次のように変更する場合:
class C(B):
def __init__(self):
B.__init__(self)
self.classData['x'] = 2
そして、次のようなtest.pyを実行します。
{'x': 2, 'y': 2, 'z': 3}
{'x': 2, 'y': 2, 'z': 3}
{'x': 2, 'y': 2, 'z': 3}
だから私の質問はこれだと思います:辞書の単一の要素を参照してベースモジュールに属する辞書を変更すると、後続のクラスのすべての辞書のその要素が変更されるのはなぜですか(それが理にかなっていることを願っています)。辞書を再定義するだけでは、それは行われません。この問題は本当に私を悩ませ始めているので、助けてください。
現在プロジェクトでこの問題が発生しており、クラスも同じ構造に従っているため、これらの.pyファイルが現在のように構造化されていることを知っておくと便利かもしれません。よろしくお願いします、ジェラルダモ