[Tutor] Const on Python
John Fouhy
john at fouhy.net
Thu Mar 6 01:30:23 CET 2008
On 06/03/2008, Tiago Katcipis <katcipis at inf.ufsc.br> wrote:
> learning. Im used to develop on c++ and java and i wanted to know if
> there is any way to create a final or const member, a member that after
> assigned cant be reassigned. Thanks to anyone who tries to help me and
> sorry to bother with a so silly question. i hope someday i can be able
> to help :-)
The short answer is: "Not really".
Actually, with recent versions of python, you could do something with
properties. e.g.:
>>> class MyClass(object):
... def fget_FOO(self):
... return 'foo'
... FOO = property(fget=fget_FOO)
...
>>> x = MyClass()
>>> x.FOO
'foo'
>>> x.FOO = 'bar'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: can't set attribute
property() takes up to three arguments: get, set, and docstring. In
this case, I omitted the setter. Thus python doesn't allow me to set
that attribute. You could also mess around with getattr() to achieve
a similar effect.
Generally, though, python takes the attitude that programmers are
adults capable of thinking for themselves, and if you're silly enough
to reassign a constant, you deserve whatever you get. Best just to
make your variable names ALL_CAPS and write documentation saying
they're constant :-)
See also this recipe:
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65207
for another take on the issue.
--
John.
More information about the Tutor
mailing list