Duncan Booth wrote:
Luis Zarrabeitia <ky...@uh.cu> wrote:

It boggles me when I see python code with properties that only set and
get the attribute, or even worse, getters and setters for that
purpose. In my university they teach the students to write properties
for the attributes in C# ("never make a public attribute, always write
a public property that just gets and sets it"). I never understood
that practice either, given that the syntax for attribute access and
property access in C# is exactly the same. (Could it be that even if
the syntax is the same, the compiled code differs? Don't know enough
about .NET to answer that).
The compiled code differs.

I *strongly* doubt that. Properties are designed to be transparent to user code that access atrributes through the usual dotted name notation precisely so that class code can be changed from
  x = ob
to
  x = property(get_x, set_x, del_x)
without changing user code.

CPython compiles attribute access to
<load object>
LOAD_ATTR <attr_name>

The code associated with LOAD_ATTR should get the attribute object and check whether it is a property, in which case it calls the proper method of the property.

> That doesn't matter if the class is only
accessed from within a single compiled program, but it does matter if you expose a public interface from a library: if you change a public attribute into a property then you need to recompile all code which accesses it.

Example to back this claim?  Perhaps you have found a bug.

tjr

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to