Использование переменной для импорта - PullRequest
1 голос
/ 21 января 2011

У меня есть следующий шаблон:

databasename = "mydatabase"
import databasefunctions

и в функциях базы данных у меня есть следующий метод.

def checkStatusOfDatabase(database=databasename):

Однако я получаю сообщение об ошибке: NameError: name 'databasename' isне определено в строке, определяющей checkStatusOfDatabase.

Конечно, я мог бы просто переместить определение имени базы данных в модуль databasefunctions, но это не подходит для моего проекта.Как еще можно добиться, чтобы имя базы данных, определенное в главном модуле, использовалось по умолчанию во всех импортируемых модулях.

Ответы [ 2 ]

4 голосов
/ 21 января 2011

Вы не можете (и не должны) делать это;это сделало бы невозможным просто импортировать databasefunctions без основного модуля.Тем не менее, вы можете реализовать по умолчанию, как это:

# databasefunctions
DEFAULT_NAME = ""
def checkStatusOfDatabase(database=DEFAULT_NAME):

# main
import databasefunctions
databasefunctions.DEFAULT_NAME = "mydatabase"
0 голосов
/ 21 января 2011

Вы можете использовать модуль __builtin__

import __builtin__
__builtin__.foo = 'bar'

. Затем он будет доступен из всех других модулей, если вы выполните аналогичный метод доступа.Вы можете использовать это и сделать это:

import __builtin__
dbName = __builtin__.get('foo', 'ham') # dictionary access with default return
def checkStatusOfDatabase(database=dbName):
    ...
...