fortepianissimo wrote:
We all know that using __getattr__() we can compute an instance
variable on demand, for example:

class Foo:
def __getattr__ (self, name):
if name == 'bar':
self.bar = 'apple'
return self.bar
else:
raise AttributeError()

Then we can

f = Foo()
s1 = f.bar
s2 = f.bar   # this uses the "cached" result

My question is can we do the same with class variables?

You can do this using a metaclass, e.g.:

py> class FooType(type):
...     def __getattr__(self, name):
...         if name == 'bar':
...             self.bar = 'apple'
...             return self.bar
...         else:
...             raise AttributeError('no attribute named %r' % name)
...
py> class Foo(object):
...     __metaclass__ = FooType
...
py> Foo.bar
'apple'

However, you probably don't want to.  What's your use case?

Steve
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to