|
2 | 2 | import warnings
|
3 | 3 | from copy import deepcopy
|
4 | 4 | from functools import partial, wraps
|
5 |
| -from typing import Any, Callable, Dict, List, Optional |
| 5 | +from typing import Any, Callable, Dict, List, Optional, Union |
6 | 6 |
|
7 | 7 | from deepdiff import DeepHash
|
8 | 8 |
|
@@ -316,9 +316,17 @@ def num_successes(self) -> int:
|
316 | 316 |
|
317 | 317 | return has_succeeded_counter
|
318 | 318 |
|
| 319 | + def _get_property_if_exists(self, name: str) -> Union[property, None]: |
| 320 | + attr = getattr(self.__class__, name, None) |
| 321 | + return attr if isinstance(attr, property) else None |
| 322 | + |
319 | 323 | def __setattr__(self, name: str, value: Any) -> None:
|
320 |
| - setattr_fn = getattr(self, "_setattr_replacement", None) or self._default_setattr |
321 |
| - setattr_fn(name, value) |
| 324 | + property_object = self._get_property_if_exists(name) |
| 325 | + if property_object is not None and property_object.fset is not None: |
| 326 | + property_object.fset(self, value) |
| 327 | + else: |
| 328 | + setattr_fn = getattr(self, "_setattr_replacement", None) or self._default_setattr |
| 329 | + setattr_fn(name, value) |
322 | 330 |
|
323 | 331 | def _default_setattr(self, name: str, value: Any) -> None:
|
324 | 332 | from lightning_app.core.flow import LightningFlow
|
|
0 commit comments