How to make a method into a property without using the @property decorator

Peter Otten __peter__ at
Sat Oct 23 17:01:56 CEST 2010

Phlip wrote:

> Pythonistas:
> Here's the property decorator:
>    @property
>    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):
...     pass
>>> a = A()
>>> setattr(type(a), "foo", property(lambda self: "FOO"))
>>> A().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 mailing list