T
Tim Chase
I've set up an object and would like to make certain
attributes read-only (or at least enforce it without doing
extra work, as per name-mangling or the like). Ideally, the
property would be set in the __init__, and then not be
allowed to change.
The best solution I've been able to come up with is
something of the form:
class Foo:
def __init__(self, name, value):
self.__dict__['_name'] = name
self.value = value
def __getattr__(self, attr):
name = "_%s" % attr
if name in self.__dict__: return self.__dict__[name]
raise AttributeError, attr
def __setattr__(self, attr, value):
if attr == 'value':
self.__dict__['value'] = value
else:
raise AttributeError, attr
Is there a better ("more pythonic") way to do this?
Particularly if it plays well with sub-classing Foo.
Thanks,
-tim
attributes read-only (or at least enforce it without doing
extra work, as per name-mangling or the like). Ideally, the
property would be set in the __init__, and then not be
allowed to change.
The best solution I've been able to come up with is
something of the form:
class Foo:
def __init__(self, name, value):
self.__dict__['_name'] = name
self.value = value
def __getattr__(self, attr):
name = "_%s" % attr
if name in self.__dict__: return self.__dict__[name]
raise AttributeError, attr
def __setattr__(self, attr, value):
if attr == 'value':
self.__dict__['value'] = value
else:
raise AttributeError, attr
Is there a better ("more pythonic") way to do this?
Particularly if it plays well with sub-classing Foo.
Thanks,
-tim