[snip]I'm trying to create some read-only instance specific properties, but the following attempt didn't work:
class Foobar(object): pass
foobar = Foobar() foobar.x = property(fget=lambda: 42)
print "foobar.x:", foobar.x
Can anyone tell me what's wrong with this approach (and perhaps the correct way to do it, if there is one)?
Properties cannot be defined on a per-instance basis. Properties must be defined at the class level. So you need to do something like:
py> class Foobar(object): ... x = property(fget=lambda self: 42) ... py> Foobar().x 42
or
py> class Foobar(object): ... pass ... py> Foobar.x = property(fget=lambda self: 42) py> Foobar().x 42
If you want to have different properties on different instances, you'll need to make each of the different instances a different subtype of Foobar, e.g.:
py> class Foobar(object):
... pass
...
py> foobar = type('FoobarSub', (Foobar,),
... dict(x=property(fget=lambda self: 42)))()
py> foobar.x
42
py> Foobar().x
Traceback (most recent call last):
File "<interactive input>", line 1, in ?
AttributeError: 'Foobar' object has no attribute 'x'What's the situation in which you think you want different properties for different instances of the same class?
STeVe -- http://mail.python.org/mailman/listinfo/python-list
