diff --git a/qutil/domains.py b/qutil/domains.py index b2bff87b76e61c745ca339bcda40ce24a980d011..9b6f2f1fbd4bfc957a6dd1dc33b17a97c4d8a72d 100644 --- a/qutil/domains.py +++ b/qutil/domains.py @@ -27,8 +27,11 @@ class Bound(Generic[_RealT]): def __set_name__(self, owner, name): self._name = f'_{name}' - def __get__(self, instance, owner) -> _RealT: - value = getattr(instance, self._name, set()) + def __get__(self, instance, owner=None) -> _RealT: + if instance is None: + return self.default + + value = getattr(instance, self._name, {self.default}) evaluated = set() for item in value: if callable(item): @@ -36,7 +39,7 @@ class Bound(Generic[_RealT]): else: evaluated.add(item) if self._name.startswith('_lower'): - lower = max(evaluated, default=inf) + lower = max(evaluated) if self.integral: try: return self.cast_lower(lower) @@ -44,7 +47,7 @@ class Bound(Generic[_RealT]): return lower return lower if self._name.startswith('_upper'): - upper = min(evaluated, default=-inf) + upper = min(evaluated) if self.integral: try: return self.cast_upper(upper) @@ -53,7 +56,7 @@ class Bound(Generic[_RealT]): return upper raise NameError('Bound descriptor instance name should start with lower or upper') - def __set__(self, instance, value): + def __set__(self, instance, value: _BoundT): if value is self: value = self.default if not is_iterable(value):