Introspection, importing and Flash

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Vsevolod (Simon) Ilyushchenko

    Introspection, importing and Flash

    Hi,

    Last year I have written a Perl module to serve as a backend to
    Macromedia Flash applications: http://www.simonf.com/amfperl

    I have just rewritten it in Python, which I have not used before. Thus,
    a couple of questions which I was not able to solve with online research:

    1. To send an arbitrary object to Flash, I would like to use
    introspection to find out the values of all its instance variables. How
    can I get their names? I've read about __dict__, __slots__, and
    __getattr__, but I am not sure what would be the most universal way to
    get all the instance variable names from both old-style and new-style
    objects. I would need something like __listattr__, which does not exist.

    2. Python class importing works in a rather confusing way. In Perl, I
    have a top-level class AMF::Perl, which I "import" once and then create
    its instance like this: "new AMF::Perl". The file Perl.pm lives in the
    AMF directory.

    In Python, the most concise way I found was to have AMFPython.py in the
    AMF directory, place __init__.py with "import AMFPython" in the AMF
    directory, then say in my top-level script
    import AMF
    instance = AMF.AMFPython.A MFPython()
    Which is rather redundant. I'd like to do something not more complicated
    than:

    import AMF.AMFPython as AMF
    instance = AMF()

    but I don't know if it's possible.

    Thanks,
    Simon
    --

    Simon (Vsevolod ILyushchenko) simonf@cshl.edu
    What happens when geospatial data becomes governance infrastructure — how satellite-derived proxies acquire institutional authority, and who bears the cost when they're wrong.


    Terrorism is a tactic and so to declare war on terrorism
    is equivalent to Roosevelt's declaring war on blitzkrieg.

    Zbigniew Brzezinski, U.S. national security advisor, 1977-81

  • Christopher T King

    #2
    Re: Introspection, importing and Flash

    > 1. To send an arbitrary object to Flash, I would like to use[color=blue]
    > introspection to find out the values of all its instance variables. How
    > can I get their names? I've read about __dict__, __slots__, and
    > __getattr__, but I am not sure what would be the most universal way to
    > get all the instance variable names from both old-style and new-style
    > objects. I would need something like __listattr__, which does not exist.[/color]

    What you seek is the dir() function, in concert with the getattr()
    function. Note that dir() returns both hidden and visible methods as well
    as instance variables. You can weed out the functions (if so desired) by
    using the callable() function. Example:

    for attrname in dir(object):
    attr=getattr(ob ject,attrname)
    if not callable(attr):
    <do something>
    [color=blue]
    > 2. Python class importing works in a rather confusing way. In Perl, I
    > have a top-level class AMF::Perl, which I "import" once and then create
    > its instance like this: "new AMF::Perl". The file Perl.pm lives in the
    > AMF directory.[/color]

    Python modules can be either directories with __init__.py entries (as you
    have discovered) or a single file. If you rename AMFPython.py to AMF.py
    and place it in your program's main directory, you can then do either
    this:

    import AMF
    instance = AMF.AMFPython()

    or this:

    from AMF import AMFPython
    instance = AMFPython()

    The dotted import notation in Python is used to refer to modules contained
    in directories, not classes contained within modules.

    Comment

    • Follower

      #3
      Re: Introspection, importing and Flash

      > What you seek is the dir() function, in concert with the getattr()[color=blue]
      > function.[/color]
      Note the standard `dir()` proviso:

      "Because dir() is supplied primarily as a convenience for use at an
      interactive prompt, it tries to supply an interesting set of names
      more than it tries to supply a rigorously or consistently defined set
      of names, and its detailed behavior may change across releases."

      -- <http://www.python.org/doc/current/lib/built-in-funcs.html>

      Off the top of my head I'd say you'd use `__slots__` if it exists,
      otherwise use `__dict__`. But I'm thinking this is possibly a FAQ that
      has a "proper" answer someone else will point to.

      --Phil.

      Comment

      Working...