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