from dataclasses import dataclass
from threading import Thread
from time import sleep


@dataclass
class BankAccount:
    balance: int = 1000

    def change_balance(self, delta: int) -> None:
        new_balance = self.balance + delta
        sleep(0.001)  # force l'entrelacement entre threads
        self.balance = new_balance


account: BankAccount = BankAccount()

def deposer():
    account.change_balance(delta=200)

def retirer():
    account.change_balance(delta=-100)

t1 = Thread(target=deposer)
t2 = Thread(target=retirer)

t1.start()
t2.start()
t1.join()
t2.join()

print(f"Solde final : {account.balance}")
