Best way to set/get an object property

Steven D'Aprano steve at REMOVE-THIS-cybersource.com.au
Sun Aug 24 20:12:10 EDT 2008


On Sun, 24 Aug 2008 12:28:53 +0200, Peter Otten wrote:

> Hussein B wrote:
> 
>> I noted that Python encourage the usage of: --
>> obj.prop = data
>> x = obj.prop
>> --
>> to set/get an object's property value. What if I want to run some logic
>> upon setting/getting a property? What is Python preferred method to do
>> so (using the new feature 'property')?
>> I don't think __getattr__ and __setattr__ are practical (I have to code
>> the property name into them).
> 
> Hussein, I don't think you'll learn much from asking these abstract
> questions. At some point you have to get your hands dirty and write
> actual code to get a feel for the language.
> 
> For example, it will then become obvious for you that property works
> best for individual attributes while __getattr__ and friends are more
> convenient if you want to treat multiple attributes the same way,
> attributes whose names may not even be known until runtime (think
> delegation).


I think you are misunderstanding Hussein's question. I believe that he is 
using "property" to refer to what we would call an attribute. Naturally I 
could be wrong, but this is how I interpret his question.

I think the actual answer to his question is that properties are the 
preferred way to "run some logic upon setting/getting" an attribute, that 
is, to implement getters and setters.

Hussein, the Java habit of writing setters and getters for everything 
isn't considered good practice in Python, but if you need them, that's 
exactly what the property() function is for.



-- 
Steven



More information about the Python-list mailing list