How to get/set class attributes in Python
George Sakkis
gsakkis at rutgers.edu
Sun Jun 12 10:35:11 EDT 2005
"alex23" wrote:
> Kalle Anke wrote:
> > I'm coming to Python from other programming languages. I like to
> > hide all attributes of a class and to only provide access to them
> > via methods.
>
> I'm pretty fond of this format for setting up class properties:
>
> class Klass(object):
> def propname():
> def fget: pass
> def fset: pass
> def fdel: pass
> def doc: """pass"""
> return locals()
> propname = property(**propname())
>
> (Replacing 'pass' in the getters & setters et.al with the actual
> functionality you want, of course...)
>
> This method minimises the leftover bindings, effectively leaving the
> getter/setter methods bound only to the property, ensuring they're only
> called when the property is acted upon.
>
> Incidentally, kudos & thanks to whomever I originally stole it from :)
>
> -alex23
And a slight improvement in readability IMHO (for python 2.4+) is the
following recipe:
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/410698.
Using the Property decorator, the property declaration above becomes:
class Klass(object):
@Property # <--- the capitalized 'P' is not a typo
def propname():
'''Documentation'''
def fget: pass
def fset: pass
def fdel: pass
The Property decorator peeks automagically the fget, fset, fdel and
__doc__ from the property's locals(), instead of having the property
return locals() explicitly. Also, it doesn't break when the property
defines local variables other than [fget, fset, fdel, doc].
George
More information about the Python-list
mailing list