Skip to content

Instantly share code, notes, and snippets.

@timurbakibayev
Created February 21, 2022 17:16
Show Gist options
  • Save timurbakibayev/7495d600cd54ea52d8ef1458aeca5ba4 to your computer and use it in GitHub Desktop.
Save timurbakibayev/7495d600cd54ea52d8ef1458aeca5ba4 to your computer and use it in GitHub Desktop.
dataclasses replace option
import dataclasses
from dataclasses import dataclass
from decimal import Decimal
@dataclass(frozen=True)
class Account:
amount: Decimal
blocked: Decimal
def add_amount(self, amount: Decimal) -> "Account":
return dataclasses.replace(self, amount=self.amount+amount)
def block_amount(self, amount: Decimal) -> "Account":
if amount > self.amount:
raise ValueError("Insufficient balance")
return dataclasses.replace(self, blocked=self.blocked+amount)
@property
def available_amount(self) -> Decimal:
return self.amount - self.blocked
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment