gpt4 book ai didi

python - 访问其他模块中的实例

转载 作者:行者123 更新时间:2023-12-01 04:23:45 25 4
gpt4 key购买 nike

我有一个类实例,我想在其他模块中访问。此类使用 configParser 加载配置值,以按照此 post 更新类实例 __dict__ 属性。 :

我想在其他模块中访问此实例。该实例仅在 main.py 文件中创建,在该文件中它可以访问通过命令行参数提供的所需参数。

我有三个文件:main.pyconfig.pyfile.py。我不知道访问 file.py 中的实例的最佳方式。我只能在 main.py 中访问它,而不能在其他模块中访问它。

我查看了以下答案,herehere但他们并没有完全回答我的情况。

#config.py
class Configuration():
def __init__(self, *import_sections):
#use configParser, get config for relevant sections, update self.__dict__

#main.py
from config import Configuration
conf = Configuration('general', 'dev')
# other lines of code use conf instance ... e.g. config.log_path in log setup

#file.py
#I want to use config instance like this:
class File():
def __init__(self, conf.feed_path):
# other code here...

考虑的选项:

  1. 初始化config.py模块中的配置

    在类定义之后的config.py中我可以添加:

    conf = Configuration('general', 'dev')

    以及在file.pymain.py中:

    from config import conf

    但是 generaldev 变量只能在 main.py 中找到,因此看起来不起作用。

  2. 使配置类成为一个函数

    我可以将其设为函数并创建模块级字典并将数据导入其他模块:

    #config.py
    conf = {}
    def set_config(*import_section):
    # use configParser, update conf dictionary
    conf.update(...)

    这意味着将其称为 config.conf['log_path'] 。我更喜欢 conf.log_path 因为它被多次使用。

  3. 通过其他实例传递

    我可以通过 main.py 中的其他类实例将 conf 实例作为参数传递,即使中间实例不使用它。看起来很乱。

  4. 还有其他选择吗?

    我可以以某种方式使用配置作为实例吗?

最佳答案

通过将您的 Configuration 类更改为 Borg ,保证你从任何你想要的地方获得一个共同的状态。您可以通过特定的 __init__ 提供初始化:

#config.py
class Configuration:
__shared_state = {}
def __init__(self, *import_sections):
self.__dict__ = self.__shared_state
if not import_sections: # we are not initializing this time
return
#your old code verbatim

像往常一样使用c = config.Configuration('general','dev')进行初始化,并且任何对conf = config.Configuration()的调用都会获取 c 创建的状态。

或者您可以提供一个初始化方法以避免篡改__init__中的共享状态:

#config.py
class Configuration:
__shared_state = {}
def __init__(self):
self.__dict__ = self.__shared_state

def import(self, *import_sections):
#your old __init__

这样一来,__init__ 方法就只有一个含义,那就更干净了。

在这两种情况下,初始化后,您都可以使用 config.Configuration() 从代码中的任何位置获取共享状态。

关于python - 访问其他模块中的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33391245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com