> Sorry about that. I want something like:
>
> class foo:
>
>    def __init__(self):
>
>         self.attr1 = None
>
>
>    def get_attr1(self):
>
>         if not self.attr1:
>
>             attr1 = <get value from DB, very expensive query>
>
>             self.attr1 = attr1
>
>         return self.attr1
>
>
> such that:
>
> foo_instance = foo()
>
> then:
>
> foo_instance.get_attr1()
>
> and
>
> foo_instance.attr1
>
> gets the same value.
>
> Such that you get to derive attr1 only as needed and just once, both 
> outside
> and within foo class.
>
> Or is it a bad idea or just plain ugly to do something like that? If it 
> is,
> kindly suggest better approach.
>
> Thanks.

It's a little ugly but not too bad. What you are describing are properties.

class Foo:
  def _get_attr1(self):
     if not self.attr1:
        attr1 = TheValue
     return attr1
  def _set_attr1(self, value):
     self.attr1 = value
     ChangeDBFunction(value)
  attr1 = property(self._get_attr1,self._setattr1,None,None)

I think that will work. The docs seem to suggest that you should subclass 
`object`.
JS 

_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to