attributes, properties, and accessors -- philosophy

Ethan Furman ethan at
Tue Nov 24 18:39:26 CET 2009

Bruno Desthuilliers wrote:
> Ethan Furman a écrit :
>> The problem I have with properties is my typing.  I'll end up 
>> assigning to an attribute, but get the spelling slightly wrong 
>> (capitalized, or missing an underscore -- non-obvious things when 
>> bug-hunting), so now I have an extra attribute which of course has 
>> zero effect on what I'm trying to do and I start getting wierd results 
>> like viewing deleted records when I *know* I set useDeleted = False... 
>> 30 minutes later I notice it was /supposed/ to be use_deleted.  *sigh*
>> So -- to keep myself out of trouble -- I have started coding such 
>> things as, for example:
>> result = table.use_deleted()       # returns True or False
>> table.use_deleted(False)           # skip deleted records
>> instead of
>> result = table.use_deleted
>> table.use_deleted = False
>> My question:  is this [ severely | mildly | not at all ] un-pythonic?
> Definitly and totally unpythonic. The first solution to your problem is 
> to stick to standard naming conventions. If this is not enough, Chris 
> pointed you to really useful tools. Also, you can override __setattr__ 
> to catch such errors - at least during the coding/debug phase.

Good tools to know about, and a consistent naming pattern also makes 
life easier (which I have since done ;).

Let's head towards murkier waters (at least murkier to me -- hopefully 
they can be easily clarified):  some of the attributes are read-only, 
such as record count; others are not directly exposed, but still 
settable, such as table version; and still others require a small amount 
of processing... at which point do I switch from simple attribute access 
to method access?


More information about the Python-list mailing list