En Mon, 24 Nov 2008 02:11:49 -0200, Rafe <[EMAIL PROTECTED]> escribió:

What are the pros and cons of these two patterns (and are there any
other)? Which is the best way to dynamically get an attribute from a
module from within the same module?

1) Using the name of the module
    this_module = sys.modules[__name__]
    attr = getattr(this_module, "whatever", None)

2) using globals
    globals()["whatever"]

3) using the bare name:
whatever

1) and 2) are useful when the desired name is variable, not a constant
like "whatever".

I have been using #1 for two reasons. First, I will never run this
module directly, so __name__ will always be the module name and not
"__main__".

(note that it works even with __main__)

Second, I can use this in a class to decide whether I want
the module where the class came from or, if I make the class a base
for a class in another module, the module where the sub-class is.

I don't completely understand your use case. In the expression:
   getattr(some_module, attribute_name)
you may use any module as the first argument (the current module, or any other).

I am not familiar with the scope, pros or cons of globals() so I would
love to hear comments on this subject.

Perhaps if you explain in more detail your use case, somebody else may have further comments...
I don't have the need to use globals()[name] very often.

--
Gabriel Genellina

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

Reply via email to