sending a variable to an imported module

Arnaud Delobelle arnodel at gmail.com
Thu Dec 8 06:55:20 EST 2011


On 8 December 2011 11:28, Bastien Semene <bsemene at cyanide-studio.com> wrote:
> Hi list,
>
> I'm trying to pass a variable to an imported module without singletons.
> I've seen in the doc, and tested that I can't use global to do it :
>
> === module.py ===
> def testf():
>  print test
>
>
> === main.py ===
> global test
> test = 1
>
> imported_module = __import__(module, globals(), locals(), [], -1)
>
> importmodule.testf()
>
> === output ===
> NameError: global name 'test' is not defined
>
>
>
> While I was reading many (many) threads about singleton I read people
> claiming that singletons can always be avoided (I can't remeber the most
> relevant thread on stackoverflow).
> I don't want to start a new debate about singletons, I think Internet has
> enough debates yet.
>
> But in my case I'd like to access this variable anywhere and at anytime
> without having to pass it as a parameter everywhere (this variable is a
> configuration manager object).
> How can I achieve that without singletons ?
> I'm beginner in Python, that's why I'm maybe missing something obvious.

Put it in its own module and import that module in the places where it
is needed.  E.g. in your example:

== settings.py ==
test = 1

== module.py ==
import settings
def testf():
    print settings.testf

== main.py ==
import module
module.testf()

In every module that you need 'test', import settings and you will be
able to access test.  This is why singletons are often not needed in
Python (just like most other design patterns).

-- 
Arnaud



More information about the Python-list mailing list