RE: Lazy Attribute

Discussion in 'Python' started by Andriy Kornatskyy, Nov 16, 2012.

  1. I believe it is not valid relate a lazy attribute as something `cached` since it cause confusion (e.g. delete of attribute cause cached item to be re-evaluated...), `cached` and `lazy` have completely different semantic meaning... however might overlap, as we see.

    Andriy


    ----------------------------------------
    > From:
    > Subject: Re: Lazy Attribute
    > Date: Fri, 16 Nov 2012 10:29:03 +0000
    > To:
    >
    > On Thu, 15 Nov 2012 15:46:19 -0700, Ian Kelly wrote:
    >
    > > Although you don't go into it in the blog entry, what I like about your
    > > approach of replacing the descriptor with an attribute is that, in
    > > addition to being faster, it makes it easy to force the object to lazily
    > > reevaluate the attribute, just by deleting it.

    >
    > You just lost me right there. That's a poor UI design -- it violates the
    > principle of least surprise. If I delete something, it should be deleted.
    > Consider your example:
    >
    > >>>> del p.display_name
    > >>>> p.display_name

    > > 'Eliza Smith'

    >
    > That's very surprising. I am not aware of any other name in Python where
    > deleting it does not remove the name from the namespace. (It is possible
    > with properties, but I haven't ever come across someone who does that.)
    >
    > I don't have a good solution for invaliding such lazy attributes. Ideally
    > we could have a new statement:
    >
    > refresh obj.attr # or some other name like "invalidate"
    >
    > but that won't happen. Other alternatives like:
    >
    > obj.attr.refresh()
    > refresh(obj.attr)
    >
    > can't work because the function will see the result of the attribute
    > lookup, not the lazy attribute itself. This won't do:
    >
    > obj.__class__.attr.refresh()
    >
    > because it won't know which instance to invalidate, although this could
    > work:
    >
    > obj.__class__.attr.refresh(obj) # but it's ugly
    >
    > I'm very vaguely leaning towards this as the least-worst solution to
    > invalidating the cached value:
    >
    > refresh(obj, 'attr') # pass the instance and the name
    >
    >
    > --
    > Steven
    > --
    > http://mail.python.org/mailman/listinfo/python-list
    Andriy Kornatskyy, Nov 16, 2012
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Ken Pu
    Replies:
    3
    Views:
    671
    Steven D'Aprano
    Jan 16, 2009
  2. Boris Borcic
    Replies:
    0
    Views:
    548
    Boris Borcic
    Jan 16, 2009
  3. Boris Borcic
    Replies:
    0
    Views:
    546
    Boris Borcic
    Jan 16, 2009
  4. Ian Kelly

    Re: Lazy Attribute

    Ian Kelly, Nov 15, 2012, in forum: Python
    Replies:
    0
    Views:
    175
    Ian Kelly
    Nov 15, 2012
  5. Andriy Kornatskyy

    RE: Lazy Attribute

    Andriy Kornatskyy, Nov 16, 2012, in forum: Python
    Replies:
    3
    Views:
    149
    Rouslan Korneychuk
    Nov 16, 2012
Loading...

Share This Page