accessor/mutator functions

Terry Reedy tjreedy at udel.edu
Fri Feb 25 12:47:18 EST 2005


<mirandacascade at yahoo.com> wrote in message 
news:1109315698.002207.245690 at g14g2000cwa.googlegroups.com...
> When I look at how classes are set up in other languages (e.g. C++), I
> often observe the following patterns:
> 1) for each data member, the class will have an accessor member
> function (a Get<whatever> function)
> 2) for each data member, the class will have a mutator member function
> (a Set<whatver> function)
> 3) data members are never referenced directly; they are always
> referenced with the accessor and mutator functions
>
> My questions are:
> a) Are the three things above considered pythonic?

As others have said, 'no', as in 'unnecessary because we have a better way 
to accomplish the same purpose without doubling the attribute namespace'. 
The purpose of the pattern is to hide the specific implementation of a 
class (which attributes are static and which dynamic) and to allow that 
implementation to change without changing programs that use the class. 
Consider a complex class with interdependent .real, .imag, .rad, and .theta 
attributes and the possible  behind-the-scene implementations for what is 
kept static and how they are kept synchronized.  The need for get/set to 
accomplish this in C++ arises from the fact that attribute names are 
resolved at compile time, so that x.a syntax can only be used for simple 
static attributes and access.  Python, on the other hand, has means to 
'magically' map what looks like direct attribute access into a function 
call.  First there was __get/setattr__ (which is awkward for multiple 
dynamic attributes) and now properties with get/set/del for individual 
dynamic attributes.

> b) What are the tradeoffs of using getattr() and setattr() rather than
> creating accessor and mutator functions for each data member?
>
> -- 
> http://mail.python.org/mailman/listinfo/python-list
> 






More information about the Python-list mailing list