这是将Python代码拆分为依赖模块的最佳方法吗?

2024-06-16 09:40:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个程序。它变得太大,无法很好地管理:它有很多与GUI功能(PyQt5)相关的代码,将近2000行。我知道在Python中,完全在一个文件中编写大型脚本是可以接受的,但是编写这个程序变得难以管理。我不能轻易地将代码组织在一个文件中。我以前尝试过将它分割成多个文件(使用我在StackOverflow上找到的方法),但没有效果。我终于意识到我可能要为我的处境做些什么。(我知道事实上,您从未将以下内容拆分为两个文件,但我将其用作示例。)下面是一个将脚本拆分为两个文件(文件1)的非常简单的示例:

# TestProg.py

class Name:
    def __init__(self, name):
        self.name = name

def testfunc():
    nm.name += nm.name[int(len(nm.name)/2):]  # Add to name, second half of name
    return nm.name

if __name__ == '__main__':
    import TestModule
    print(TestModule.returnName(TestModule.nm))
    input()

文件2:

# TestModule.py

import TestProg

Name = TestProg.Name
testfunc = TestProg.testfunc


nm = Name('Henry')

def returnName(name):
    return name.name[::-1] + testfunc()

如果你试着运行这个,它就不起作用了。我最终发现这是因为testfunc是在TestProg中定义的,并且使用了一个全局变量(在TestProg中没有定义)。要解决这个问题,必须用testfunc.__globals__['nm'] = nm修改testfunc的globals dict,并在定义nm之后将其放入TestModule。你知道吗

我知道这不是一件好事,但这似乎是我能想到的最好的办法。现在,我知道,“只需为testfunc使用一个局部变量/参数,而不是全局变量。”问题是,它是一个全局变量(需要在与split中的函数分开的文件中定义)。我不想每次都要将变量传递给函数,这非常单调、重复,而且浪费时间。我的问题是:有没有更好的方法?我想不会。第二个问题是:这种方法可以接受吗?它是否被认为是黑客攻击/非常不友好,因此使用它是不明智的?你知道吗

请记住,我真的需要文件被分割,但我真的不能比需要这种方法工作的分割更好(据我所知)。你知道吗


Tags: 文件方法代码name程序脚本示例定义