============================================================
 ENCAPSULATION & PROPERTIES — TEMPERATURE CLASS - Demo Run
============================================================

--- Basic property access ---
  t.celsius = 25
  t.fahrenheit = 77.0
  t.kelvin = 298.15

--- Setting via Fahrenheit, reading back all three scales ---
  After t.fahrenheit = 98.6:
    celsius = 37.00, fahrenheit = 98.60, kelvin = 310.15

--- Validation from EVERY entry point ---
  celsius: correctly rejected -- -300 C is below absolute zero (-273.15 C)
  fahrenheit: correctly rejected -- -295.55555555555554 C is below absolute zero (-273.15 C)
  kelvin: correctly rejected -- -283.15 C is below absolute zero (-273.15 C)

--- Name mangling demonstration ---
  Direct access to t.__internal_id failed as expected: 'Temperature' object has no attribute '__internal_id'
  Accessible via mangled name: t._Temperature__internal_id = 139643437686352

--- __repr__ for debugging ---
  repr(t) = Temperature(celsius=37.00)

============================================================
 Assignment: is_freezing read-only property + consistency check
============================================================
  Temperature(-5).is_freezing = True
  Temperature(0).is_freezing = True
  Temperature(20).is_freezing = False

  Confirming all 3 scales stay consistent no matter which is set:
  Set via kelvin=300 -> celsius=26.85, fahrenheit=80.33, kelvin=300.00
