@@ -22,11 +22,13 @@ def __init__(
2222 init : bool = False ,
2323 always_update : bool = False ,
2424 compute : bool = True ,
25+ on_set : Callable [[Reactable , str , ReactiveType ], None ] | None = None ,
2526 ) -> None :
2627 self ._default = default
2728 self ._init = init
2829 self ._always_update = always_update
2930 self ._run_compute = compute
31+ self ._on_set = on_set
3032
3133 def _initialize_reactive (self , obj : Reactable , name : str ) -> None :
3234 """Initialized a reactive attribute on an object.
@@ -129,6 +131,9 @@ def __set__(self, obj: Reactable, value: ReactiveType) -> None:
129131 if self ._run_compute :
130132 self ._compute (obj )
131133
134+ if callable (self ._on_set ):
135+ self ._on_set (obj , self .name , value )
136+
132137 @classmethod
133138 def _check_watchers (cls , obj : Reactable , name : str , old_value : Any ):
134139 """Check watchers, and call watch methods / computes
@@ -226,9 +231,11 @@ def __init__(
226231 * ,
227232 init : bool = True ,
228233 always_update : bool = False ,
234+ on_set : Callable [[Reactable , str , ReactiveType ], None ] | None = None ,
229235 ) -> None :
230236 super ().__init__ (
231237 default ,
232238 init = init ,
233239 always_update = always_update ,
240+ on_set = on_set ,
234241 )
0 commit comments