From 45a6e3537bfe25b25aac96143ebc1e1fdf822970 Mon Sep 17 00:00:00 2001 From: Scott Gasch Date: Mon, 17 Oct 2022 23:03:38 -0700 Subject: [PATCH] Make DeferredOperand handle sets, dirs, dels transparently by passing them along to the wrapped result. --- src/pyutils/parallelize/deferred_operand.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/pyutils/parallelize/deferred_operand.py b/src/pyutils/parallelize/deferred_operand.py index 8d5c30c..5bb823f 100644 --- a/src/pyutils/parallelize/deferred_operand.py +++ b/src/pyutils/parallelize/deferred_operand.py @@ -181,5 +181,20 @@ class DeferredOperand(ABC, Generic[T]): def __float__(self) -> float: return float(DeferredOperand.resolve(self)) - def __getattr__(self, method_name): - return getattr(DeferredOperand.resolve(self), method_name) + def __getattr__(self, name): + return getattr(DeferredOperand.resolve(self), name) + + def __setattr__(self, name, value): + # subclass setting its own properties + if name in set(['id', 'wrapped_future']): + object.__setattr__(self, name, value) + return + + # otherwise operate on the wrapped result + DeferredOperand.resolve(self).__setattr__(name, value) + + def __delattr__(self, name): + return delattr(DeferredOperand.resolve(self), name) + + def __dir__(self): + return dir(DeferredOperand.resolve(self)) -- 2.46.0