Use cases for "setattr" in existing code

Discussion in 'Python' started by John Nagle, Jul 30, 2010.

  1. John Nagle

    John Nagle Guest

    I've been looking at existing code, using Google Code search,
    to see what use cases for "setattr" are actually used in production
    code. High-performance implementations like Shed Skin try to
    avoid dynamic creation of attributes, so it's worth seeing where
    this feature is used in production.

    1. Copying

    "setattr" is used by "copy" and "pickle" to construct new
    objects without calling their constructors. This is seen only in
    code which also uses the CPython feature that the class of an object
    can be changed by storing into the "__class__" attribute.

    2. Proxying

    A local object is being created as a proxy for some remote object.
    This shows up in the Python shim for Remember the Milk, in the
    wrapper for a restricted execution shell "rexec.py"

    3. Representation of some other data structure.

    This is typically seen where some XML or JSON structure has been
    translated into a tree of Python objects, and attribute access is being
    used to access the data from the original object. This can result
    in name clashes with existing attributes and keywords. Used by
    BeautifulSoup.

    4. Ordered dictionaries

    "odict.py" uses "setattr", but with the comment "FIXME", noting
    that unrestricted "setattr" can break the built-in attributes.

    5. Enums

    The Google Wave API uses "setattr" in StringEnum, which creates
    an enumeration-like object.

    6. Test platforms

    "setattr" is used in "Mocker" to insert shim objects for test
    purposes. This is a special case of proxying.


    Note that in all the above cases, "setattr" is being used during
    (or even prior to) object construction. It's rarely used on "live"
    objects.

    For the above cases, a mechanism for constructing general objects
    would do the job. Something like

    attrdict = { 'a' : 1, 'b' : 2 }
    obj = make_object('classname', attrdict)

    There are clearly use cases for dynamic object construction, but
    modifying the structure of an object after creation is quite rare.

    John Nagle
     
    John Nagle, Jul 30, 2010
    #1
    1. Advertisements

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.