从另一个模块访问类实例(Python)

时间:2014-01-02 17:56:07

标签: python

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

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

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

现在我的问题是我无法弄清楚如何操纵路径(使用路径 来自工具模块内部功能的主模块中该实例的设置者。将类实例或主模块导入工具模块似乎不起作用。

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

我粘贴相关的代码位用于说明:

主模块内的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()

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

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()

1 个答案:

答案 0 :(得分: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)并知道所有其他函数/模块/类都会知道更新。

如果你不想要单身,那么在某个地方(正如你所做的那样)在主模块中设置一个设置对象是一个很好的解决方案。