Makes read only attributes for a Python class

read, only, attributes, property
pip install read-only-attributes==1.2


Read Only Attributes

Build Status codecov Code style: black PyPI version Python 3.6 Python 3.7 Python 3.8


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:
        def x(self):
            return 'immutable 1'
        def y(self):
            return 'immutable 2'
        def z(self):
            return 'immutable 3'
        def w(self):
            return 'immutable '

The above can be written like so which is much less verbose and lot more explicit:

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 AttributeError.


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 @property.
'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.