Floating point is wrong for money. Implement Money(amount, currency) where amount is stored as a Decimal quantised to 2 places (ROUND_HALF_UP); accept strings, ints or Decimals (reject floats with TypeError).
Support:
+ and - between Money of the same currency (different currencies raise ValueError)* by an int or Decimal (result re-quantised)<, <=, >, >=, == (same currency only for ordering; == is just False across currencies) using functools.total_orderingstr(m) like "12.50 GBP"