How to make a method into a property without using the @property decorator
__peter__ at web.de
Sat Oct 23 17:01:56 CEST 2010
> Here's the property decorator:
> def foo(self): return 'bar'
> If I generate foo dynamically, how to I make it a property?
> setattr(self, 'foo', property(lambda: 'bar'))
> Variations of that are apparently not working.
You have to put the property descriptor into the class, not an instance:
>>> class A(object):
>>> a = A()
>>> setattr(type(a), "foo", property(lambda self: "FOO"))
> (I'm heading for a proxy pattern, where if you never call the
> generated prop, you never hit the database to load it into memory.)
You may be better off with __getattr__().
More information about the Python-list