2016-09-18 63 views
0

我已经将程序拆分为三个脚本。其中之一'classes.py'是定义我需要的所有类的模块。另一个是一种设置模块,将其称为'setup.py',它从'classes.py'中实例化了很多对象(这只是一些带有几个for循环,没有函数或类的变量赋值)。它有很多字符串和我不想看到的东西,当我正在处理程序本身的第三个脚本时,即实际上完成上述所有操作的脚本。使用嵌套模块的正确方法

我得到这个工作的唯一方法是添加,在“setup.py”脚本:

from classes import * 

这让我在设置文件快速编写,而无需到处添加的命名空间。并且,在主要脚本中:

import setup 

这有PyCharm的优点,使我可以完全完成类和方法的代码,这很好。

我想要实现的是让主脚本导入类,然后使用两个简单的命令运行安装脚本来创建我需要的对象。但是我无法将类脚本导入到主脚本中,因为安装脚本无法执行任何操作,因此没有类定义。我应该将这些类导入两个脚本中,还是完全用其他方法完成?

+0

对不起,为什么将'classes'模块导入到主脚本中意味着安装程序无法执行任何操作? –

+0

是的,所有的东西都应该放在各自的文件中。 –

回答

0

导入每个文件。考虑this SO post。从Fooz先生的回答可知,

每个模块都有自己的命名空间。因此,为了让boo.py看到来自外部模块的东西,boo.py必须自己导入它。

有可能编写一种语言,其中名称空间按照您期望的方式堆叠:这称为动态范围界定。像原始lisp,早期版本的perl,postscript等一些语言确实使用(或支持)动态范围。

大多数语言使用词法作用域代替。事实证明,这对于语言的工作来说是一个更好的方式:这样一个模块就可以根据自己的代码推断它将如何工作,而无需担心如何调用它。

请参阅本文的其他详细信息:http://en.wikipedia.org/wiki/Scope_%28programming%29

直观地这种感觉更好过,因为你可以立即看到哪些依赖代码有(文件本身) - 这将让你多理解你的代码更好,一个月,甚至一年后。

+0

感谢您的回答和SO帖子。现在看起来是合乎逻辑的:从现在开始,我读了C脚本,看到它输入了B,然后我看了B,看到它输入了A.我只是不确定这是不是一个好习惯:)非常感谢。 – Cirrocumulus