# Properties editor-visible, validated, range-bounded node values. ```{raw} html ▶ Run in browser ``` **Tags:** `basics` `property` `inspector` A `Property` is a descriptor declared as a class attribute. It gives a node a typed value the editor inspector can show and the scene serializer persists, with automatic range clamping and an optional `on_change` hook. Here two bars are driven entirely by their `Property` values: drag-free sliders animate the values, the renderer reads them back, and an out-of-range write is clamped in place so the drawing never exceeds its bounds. ## What it demonstrates - `Property(default, range=(lo, hi))` -- a class attribute holding a validated value, read/written via `self.attr`. - Range clamping: assigning outside `(lo, hi)` silently clamps to the nearest bound (no exception). - `Property(default, on_change="method")` -- a bound method fires only when the value actually changes. - Property values driving what a node draws each frame. ## Source ```{literalinclude} ../../examples/features/basics/properties.py :language: python :linenos: ```