[Python-Dev] The decorator(s) module
Duncan Booth
duncan.booth at suttoncourtenay.org.uk
Sat Feb 11 14:29:07 CET 2006
More information about the Python-Dev mailing list
Sat Feb 11 14:29:07 CET 2006
- Previous message: [Python-Dev] The decorator(s) module
- Next message: [Python-Dev] The decorator(s) module
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Georg Brandl <g.brandl at gmx.net> wrote in news:dsj0p7$tk3$1 at sea.gmane.org: > Unfortunately, a @property decorator is impossible... > It all depends what you want (and whether you want the implementation to be portable to other Python implementations). Here's one possible but not exactly portable example: from inspect import getouterframes, currentframe import unittest class property(property): @classmethod def get(cls, f): locals = getouterframes(currentframe())[1][0].f_locals prop = locals.get(f.__name__, property()) return cls(f, prop.fset, prop.fdel, prop.__doc__) @classmethod def set(cls, f): locals = getouterframes(currentframe())[1][0].f_locals prop = locals.get(f.__name__, property()) return cls(prop.fget, f, prop.fdel, prop.__doc__) @classmethod def delete(cls, f): locals = getouterframes(currentframe())[1][0].f_locals prop = locals.get(f.__name__, property()) return cls(prop.fget, prop.fset, f, prop.__doc__) class PropTests(unittest.TestCase): def test_setgetdel(self): class C(object): def __init__(self, colour): self._colour = colour @property.set def colour(self, value): self._colour = value @property.get def colour(self): return self._colour @property.delete def colour(self): self._colour = 'none' inst = C('red') self.assertEquals(inst.colour, 'red') inst.colour = 'green' self.assertEquals(inst._colour, 'green') del inst.colour self.assertEquals(inst._colour, 'none') if __name__=='__main__': unittest.main()
- Previous message: [Python-Dev] The decorator(s) module
- Next message: [Python-Dev] The decorator(s) module
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-Dev mailing list