Kano001's picture
Upload 3077 files
6a86ad5 verified
raw
history blame
1.49 kB
"""Mixin classes for sharing functionality between unrelated classes.
This module is named with a leading underscore to signify to users that it's
"private" and only intended for internal use by the biomechanics module.
"""
__all__ = ['_NamedMixin']
class _NamedMixin:
"""Mixin class for adding `name` properties.
Valid names, as will typically be used by subclasses as a suffix when
naming automatically-instantiated symbol attributes, must be nonzero length
strings.
Attributes
==========
name : str
The name identifier associated with the instance. Must be a string of
length at least 1.
"""
@property
def name(self) -> str:
"""The name associated with the class instance."""
return self._name
@name.setter
def name(self, name: str) -> None:
if hasattr(self, '_name'):
msg = (
f'Can\'t set attribute `name` to {repr(name)} as it is '
f'immutable.'
)
raise AttributeError(msg)
if not isinstance(name, str):
msg = (
f'Name {repr(name)} passed to `name` was of type '
f'{type(name)}, must be {str}.'
)
raise TypeError(msg)
if name in {''}:
msg = (
f'Name {repr(name)} is invalid, must be a nonzero length '
f'{type(str)}.'
)
raise ValueError(msg)
self._name = name