別名参照問題(『テスト駆動開発』3章)
5ドルを示すDollarインスタンスを作る
小切手オブジェクトに代入
別の小切手オブジェクトにも同じインスタンスを代入
あるとき最初の小切手オブジェクトの金額(Dollar)の値を変更すると、意図せず2つ目の小切手の金額の値も変更されてしまう。(Kindle の位置No.454-455)
code:aliasing_bug.py
from dataclasses import dataclass
@dataclass
class Dollar:
value: int
@dataclass
class Check:
amount: Dollar
amount = Dollar(5)
check1 = Check(amount)
check2 = Check(amount)
code:interpreter.py
>> # python -i aliasing_bug.py
>> check1
Check(amount=Dollar(value=5))
>> check2
Check(amount=Dollar(value=5))
>> check1.amount.value = 7 # 1つ目の小切手オブジェクトの金額の値を変更
>> check1
Check(amount=Dollar(value=7))
>> check2 # 2つ目の小切手オブジェクトの金額の値も変更されてしまう
Check(amount=Dollar(value=7))