1

如果我有两个文件 helper.app 和 main.app,我希望能够完成这样的事情。

助手.py

def configurestuff(dblocationstring):
  # Stuff that sets name and location
  generic_connection_variable = connectto(dblocationstring)

def dostuff():
  # does stuff with the generic_connection_variable

在我的 main.py 中,我希望能够做类似的事情

import helper
helper.configure("customlocationofdb")
helper.dostuff()
#or even
helper.generic_connection_variable.someApplicableMethod()

我的目标是让我可以拥有一个 main.app,它能够使用“帮助器”传递变量来建立连接并在导入帮助器后在 main.app 中重用该变量(如果可能)。组织我的代码以完成此任务的最佳方法是什么?(我不确定如何在我的 main.py 中访问 generic_connection_variable,因为它在函数中,或者最好的方法是什么)

4

3 回答 3

1

将其作为一个类实现可以提供更大的灵活性:

class Config(object):
    DB_STRING = 'some default value'
    ANOTHER_SETTING = 'another default'
    DEBUG = True

    def dostuff(self):
      print 'I did stuff to ',self.DEBUG

class ProductionConfig(Config):
    DEBUG = False # only turn of debugging

class DevelopmentConfig(Config):
    DB_STRING = 'localhost'

    def dostuff(self):
       print 'Warning! Development system ',self.DEBUG

将其存储在任何文件中,例如settings.py. 在您的代码中:

from settings import Config as settings
# or from settings import ProductionConfig as settings

print settings.DEBUG # for example
于 2012-12-10T04:57:25.130 回答
1

您可以定义generic_connection_variable为模块级变量。

所以在你的helper.py你将不得不

generic_connection_variable = None  # or whatever default you want.


def configurestuff(dblocationstring):
    global generic_connection_variable
    # Stuff that sets name and location
    generic_connection_variable = connectto(dblocationstring)

def dostuff():
    global generic_connection_variable
    # does stuff with the generic_connection_variable
于 2012-12-10T06:51:17.553 回答
0

很难说出您在问什么,但是您是否尝试过制作generic_connection_variable的实例变量helper?(带self关键字)

# helper.py:

def configurestuff(dblocationstring):
  # Stuff that sets name and location
  self.generic_connection_variable = connectto(dblocationstring)

现在它generic_connection_variable属于一个实例,helper而不是局部范围的configurestuff,您将能够main按如下方式使用它:

import helper
helper.configure("customlocationofdb")
helper.generic_connection_variable.someApplicableMethod()

但是您可能需要为它定义一个类,generic_connection_variable以便它有一个名为someApplicableMethod().

于 2012-12-10T04:50:41.493 回答