【问题标题】:Accessing class instance from another module (Python)从另一个模块访问类实例(Python)
【发布时间】:2014-01-03 02:39:11
【问题描述】:

我对 Python 很陌生,就 OOP 而言,这可能是我无法弄清楚以下内容的原因:
我正在编写一个 python 脚本,它打开一个文本文件,然后将其转换为 HTML,为编辑文件和 html 文件维护它的“自己的”镜像目录树。 由于目录创建和删除是自动完成的,除其他标准外,文件是否存在,我需要某种自动和动态的路径调整。该脚本必须对文件和相关目录进行多次检查,然后才能设置相应的路径并开始处理。

我决定将大多数更通用的功能(检查文件是否存在,如果找到重复文件名显示对话框等)放在一个单独的模块中,因为它们非常具体,不依赖于任何状态。实际上它们创建了状态(路径变量),所以如果这不是一个误解,那么一个类就没有意义了。

另一方面,我使用一个类来获取和设置路径,因为我需要从每个模块访问的路径,所以它基本上是路径的全局访问点。 该类在主模块中实例化。

现在我的问题是我不知道如何操作路径(使用路径 setters) 来自工具模块内的函数的主模块中的该实例。将类实例或主模块导入工具模块似乎不起作用。

一般来说,是否可以在所有模块文件中使用类实例,这是可行的方法,还是我以某种方式错过了重点?

我贴上相关的代码进行说明:

主模块内的Setter/Getter类

class SetEnv():
def __init__(self):
    pass

def set_path_srcfile(self, path_srcfile):
    self.path_srcfile = path_srcfile 

def set_path_htmlfile(self):
    self.path_htmlfile = self.path_srcfile.replace('source', 'html', 1).replace('.txt', '.html', 1)

def get_path_srcfile(self):
    return self.path_srcfile

def get_path_htmlfile(self):
    return self.path_htmlfile

稍后在 main_module 中:

env = SetEnv()

工具模块的一部分(在用户输入的定义内):

import main_module as mm
path_srcfile = dict[int(user_option)][1] # dictionary holding the path we want to set
mm.env.set_path_srcfile(path_srcfile)
mm.env.set_path_htmlfile()

【问题讨论】:

    标签: python


    【解决方案1】:

    我可能误解了你的问题,请纠正我。据我了解,您在整个项目中使用 SetEnv 对象的一个​​实例来存储和修改一些路径配置。

    如果你真的想要一个类似设置对象的单例,那么使用模块而不是类。

    # env.py
    _src = ''
    _html = ''
    
    def set_path_srcfile(path_srcfile):
        global _src
        _src = path_srcfile
    
    def get_path_srcfile():
        return _src
    
    ...
    

    然后你可以在任何需要它的地方使用import env; env.set_path_srcfile(myfile) 并且知道所有其他函数/模块/类都会知道更新。

    如果您不想要单例,那么在主模块中的某处(就像您所做的那样)提供一个设置对象是一个很好的解决方案。

    【讨论】:

    • 谢谢,这消除了我的疑虑,对模块的单例字符提出了很好的建议。实际上,在主模块中导入类实例(就像任何其他模块一样)确实有效,这与我之前所说的相反。
    猜你喜欢
    • 1970-01-01
    • 2016-05-15
    • 2013-10-28
    • 2012-12-13
    • 2023-01-07
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    相关资源
    最近更新 更多