对于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()
答案 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)
并知道所有其他函数/模块/类都会知道更新。
如果你不想要单身,那么在某个地方(正如你所做的那样)在主模块中设置一个设置对象是一个很好的解决方案。