qudi.util.descriptors
Descriptor objects that can be used to simplify common tasks related to object attributes.
Classes
Base descriptor class implementing trivial get/set/delete behaviour for an instance attribute. |
|
|
Attribute that can be given a default value which is used if not explicitly initialized by the instance. |
|
Extension of DefaultAttribute to be read-only. |
|
Extension of DefaultAttribute including type checking via isinstance. |
|
Extension of DefaultAttribute including optional validation via static or bound validator methods as well as optional type checking via "isinstance". |
|
Mixin for BaseAttribute introducing optional default value behaviour in __get__. |
Mixin for BaseAttribute introducing read-only access |
|
|
Mixin for BaseAttribute introducing optional type checking via isinstance builtin |
|
Mixin for BaseAttribute introducing optional validation via registering static and/or bound validator methods. |
- class qudi.util.descriptors.BaseAttribute[source]
Bases:
builtins.objectBase descriptor class implementing trivial get/set/delete behaviour for an instance attribute.
- class qudi.util.descriptors.CheckedAttribute(static_validators: ~typing.Iterable[~typing.Callable[[~typing.Any], None]] | None = None, valid_types: ~typing.Iterable[~typing.Type] | None = None, default: ~typing.Any | None = <object object>)[source]
Bases:
qudi.util.descriptors.TypedMixin,qudi.util.descriptors.ValidateMixin,qudi.util.descriptors.DefaultAttributeExtension of DefaultAttribute including optional validation via static or bound validator methods as well as optional type checking via “isinstance”. A given default value is not validated. Type checking is performed before validation. Register bound validator methods via the CheckedAttribute.validator decorator. This decorator can be combined with classmethod/staticmethod decorators in any order.
Example usage:
- def my_static_validator(value):
- if not (0 <= value <= 100):
raise ValueError(‘Value must be number between 0 and 100’)
- class Test:
variable_a = CheckedAttribute([my_static_validator], [int, float], 0) variable_b = CheckedAttribute(valid_types=[str]) _valid_strings = [‘A’, ‘B’, ‘C’]
- def __init__(self):
self.variable_a = 66.7 self.variable_b = ‘B’ assert self.variable_a == 66.7 assert self.variable_b == ‘B’ # The following would raise ValueError # self.variable_a = 101 # self.variable_b = ‘D’
@variable_b.validator @classmethod def _validate_variable_b(cls, value):
- if value not in cls._valid_strings:
raise ValueError(f’Invalid string. Valid strings are: {cls._valid_strings}’)
- class qudi.util.descriptors.DefaultAttribute(default: ~typing.Any | None = <object object>)[source]
Bases:
qudi.util.descriptors.DefaultMixin,qudi.util.descriptors.BaseAttributeAttribute that can be given a default value which is used if not explicitly initialized by the instance.
Example usage:
- class Test:
variable_a = DefaultAttribute(42) variable_b = DefaultAttribute() def __init__(self):
self.variable_b = self.variable_a - 42 assert self.variable_a == 42 assert self.variable_b == 0
- class qudi.util.descriptors.DefaultMixin(default: ~typing.Any | None = <object object>, **kwargs)[source]
Bases:
builtins.objectMixin for BaseAttribute introducing optional default value behaviour in __get__. If no default value is specified, fall back to raising AttributeError.
- class qudi.util.descriptors.ReadOnlyAttribute(default: ~typing.Any | None = <object object>)[source]
Bases:
qudi.util.descriptors.ReadOnlyMixin,qudi.util.descriptors.DefaultAttributeExtension of DefaultAttribute to be read-only. A non-default value can be set by calling “set_value(instance, value)” on the descriptor instance.
Example usage:
- class Test:
variable_a = ReadOnlyAttribute(42) variable_b = ReadOnlyAttribute() def __init__(self):
self.__class__.variable_b.set_value(self, self.variable_a - 42) assert self.variable_a == 42 assert self.variable_b == 0 # The following would raise an AttributeError # self.variable_b = 0
- class qudi.util.descriptors.ReadOnlyMixin[source]
Bases:
builtins.objectMixin for BaseAttribute introducing read-only access
- class qudi.util.descriptors.TypedAttribute(valid_types: ~typing.Iterable[~typing.Type] | None = None, default: ~typing.Any | None = <object object>)[source]
Bases:
qudi.util.descriptors.TypedMixin,qudi.util.descriptors.DefaultAttributeExtension of DefaultAttribute including type checking via isinstance. A given default value is not type-checked.
Example usage:
- class Test:
variable_a = TypedAttribute([int, float]) variable_b = TypedAttribute([str], None) def __init__(self):
assert self.variable_b is None self.variable_a = 42 self.variable_b = ‘hello world’ assert self.variable_a == 42 assert self.variable_b == ‘hello world’ # The following would raise TypeError # self.variable_a = self.variable_b = None
- class qudi.util.descriptors.TypedMixin(valid_types: Iterable[Type] | None = None, **kwargs)[source]
Bases:
builtins.objectMixin for BaseAttribute introducing optional type checking via isinstance builtin
- class qudi.util.descriptors.ValidateMixin(static_validators: Iterable[Callable[[Any], None]] | None = None, **kwargs)[source]
Bases:
builtins.objectMixin for BaseAttribute introducing optional validation via registering static and/or bound validator methods. Bound methods are best registered via the “validator” decorator (cooperative with staticmethod/classmethod decorator)