Antoon Pardon wrote:
Can anyone explain why descriptors only work when they are an attribute
to an object or class. I think a lot of interesting things one can
do with descriptors would be just as interesting if the object stood
on itself instead of being an attribute to an other object.
Not sure what "stood on itself" really means, but if you just want to be
able to have module-level properties, you can do something like:
py> class Module(object):
.... oldimporter = __builtins__.__ import__
.... def __init__(self, *args):
.... mod = self.oldimporte r(*args)
.... self.__dict__ = mod.__dict__
.... p = property(lambda self: 42)
....
py> __builtins__.__ import__ = Module
py> import __main__
py> __main__.p
42
py> __main__.p = 3
Traceback (most recent call last):
File "<interacti ve input>", line 1, in ?
AttributeError: can't set attribute
where you replace module objects with a different object. Note that
this is also nasty since properties reside in the class, so all modules
now share the same properties:
py> import sys
py> sys.p
42
py> sys.p = 13
Traceback (most recent call last):
File "<interacti ve input>", line 1, in ?
AttributeError: can't set attribute
STeVe