Question about properties

Frank Millman frank at chagford.com
Thu Jul 17 11:57:32 CEST 2008


Hi all

I have started experimenting with properties.

The example in the 2.5 docs uses an inconsistent mixture of single and
double underscores for the internal representation of the attribute. I
was going to file a documentation bug, but then I checked the 2.6 docs
online, and I see it has been fixed, by using single underscores
throughout.

IMHO, it would make more sense to use double underscores throughout. I
thought that the main point of using property was to prevent direct
access to the attribute. With a single underscore you can access it if
you prefix the attribute name with a single underscore, thus bypassing
the logic in 'property'.

Is this a valid comment, or does it come under the category of 'we are
all adults here'?

While experimenting, I came across the following curiosity.

I know that prefixing a class attribute with a double-underscore makes
it difficult to access the attribute externally. Here is a simple
example -

>>>class Test(object):
...    def __init__(self,x):
...        self.x = x
...        self.__y = 123
...    def get_y(self):
...        return self.__y

>>>t = Test(99)
>>>t.x
99
>>>t.get_y()
123
>>>t.__y
AttributeError: 'Test' object has no attribute '__y'

I was surprised that I could do the following -

>>>t.__y = 456
>>>t.__y
456
>>>t.get_y()
123

It's not important, but I am curious to know what is going on
internally here.

Frank Millman



More information about the Python-list mailing list