Static properties
Alex Martelli
aleaxit at yahoo.com
Thu Aug 26 17:01:49 EDT 2004
Per Erik Stendahl <python-spam at berrs.net> wrote:
> Hello everyone,
>
> Is it possible to define "static properties" in a class?
Yes, but only by defining a custom metaclass to be the type of that
class. Properties are defined in the type, not in the instance; so, for
a class itself to have properties, the class's type, commonly known as
its metaclass, must be the one defining them.
>>> class metaPath(type):
... def curdir(cls): return os.getcwd()
... curdir = property(curdir)
...
>>> class Path: __metaclass__ = metaPath
...
>>> print Path.curdir
/Users/alex/cb/dblite/dblite_0.5
_However_...:
>>> print Path().curdir
Traceback (most recent call last):
File "<stdin>", line 1, in ?
AttributeError: 'Path' object has no attribute 'curdir'
>>>
if you want to be able to get at property curdir on INSTANCES of Path as
you normally would for a staticmethod, yet with property syntax, I think
you need to get a bit more clever than this... descriptors don't get
looked up two metalevels up, only one...
Alex
More information about the Python-list
mailing list