`final` keyword equivalent for variables in Python?

Jason Coon picture Jason Coon · Apr 29, 2009 · Viewed 62.1k times · Source

I couldn't find documentation on an equivalent of Java's final in Python, is there such a thing?

I'm creating a snapshot of an object (used for restoration if anything fails); once this backup variable is assigned, it should not be modified -- a final-like feature in Python would be nice for this.

Answer

Stephan202 picture Stephan202 · Apr 29, 2009

There is no final equivalent in Python. 

But, to create read-only fields of class instances, you can use the property function.

Edit: perhaps you want something like this:

class WriteOnceReadWhenever:
    def __setattr__(self, attr, value):
        if hasattr(self, attr):
            raise Exception("Attempting to alter read-only value")

        self.__dict__[attr] = value