我是一名机械工程专业的学生,我正在使用PyODE构建物理模拟。
而不是从一个文件运行所有内容,我想组织模块中的东西,所以我有:
当我意识到helper.py需要从main引用变量时遇到了问题,但是main是一个导入帮助器!
所以我的解决方案是创建第4个文件,其中包含变量并仅导入外部模块(例如时间和随机)。
所以我现在有:
并且所有脚本都有:import parameters
并使用:parameters.foo
或parameters.bar
。
这是一种可以接受的做法,还是一种让python程序员呕吐的可靠方法? :)
请告诉我这是否有意义,或者是否有更明智的做法!
谢谢, -Leav
答案 0 :(得分:3)
每个地方所需的常量,配置和包含的单独“全局”文件都可以。但是当它们包含实际的可变变量时,它们就不是一个好主意。考虑让文件与函数返回值和参数进行通信。这促进了封装,并使您的代码不会变得混乱。
文件之间的清晰通信使它们更容易理解,并使更明显的事情发生。当你使用变量并且没有人知道它们来自哪里时,事情会变得非常烦人。 :)
答案 1 :(得分:2)
嗯,我认为如果发生这种情况就不会发生:“意识到helper.py需要从main引用变量”,你的帮助函数应该独立于你的“主代码”,否则我认为它的丑陋和更多就像设计失败一样。
答案 2 :(得分:1)
我尝试设计我的代码,使其看起来很像金字塔。我发现,这导致代码更清晰。
答案 3 :(得分:0)
我不太确定这是不是很好,但如果你使用课程,我不明白为什么会出现问题。或者我错过了什么?
如果您希望能够独立地运行每个脚本,这就是阻止您进行面向对象的原因,那么您可以在脚本结束时执行以下操作。
if __name__ == '__main__':
# Code that you want to run when the script is executed.
# This block will not be executed if the script is imported.
阅读有关Python here中的类的更多信息。
答案 4 :(得分:0)
您应该阅读Dependency Inversion。
答案 5 :(得分:0)
似乎你想要的是组织组件之间的各种依赖关系。最好以面向对象的方式表达这些依赖关系。而不是通过导入模块和全局状态来进行,在对象中编码这些状态并传递它们。
阅读对象和类以及如何用Python编写它们;我可能会从那里开始。