Read Only Attributes
This package makes class attributes read only.
We can make read only attributes using
@property. But this can be verbose. Worse, the intent is not clear as in these attributes are meant to be read-only.
Like as below
class MyClass: @property def x(self): return 'immutable 1' @property def y(self): return 'immutable 2' @property def z(self): return 'immutable 3' @property def w(self): return 'immutable '
The above can be written like so which is much less verbose and lot more explicit:
@read_only_attributes('x','y','z','w') class MyClass: def __init__(self, x, y, z, w): self.x = x self.y = y self.z = z self.w = w
Once the instance attributes are assigned in the _init_, they cannot be changed. Trying to change them will raise an
pipenv install read-only-properties
import class decorator @read_only_attributes and use like so:
from roa import read_only_attributes @read_only_attributes('x', 'y') class MyClass: def __init__(self, x, y, z): self.x = x self.y = y self.z = z
That's it. There us no need to use
'x' and 'y' are now readonly attributes. If we try to change them,
AttributeError exception will be raised.
Since 'z' is not in decorator argument list,
self.z is a mutable instance attribute.