我在理解python3

时间:2015-05-19 19:15:38

标签: python file python-3.x import

我查看了许多网站和许多相关问题,但是按照这些问题的解决方案仍然没有帮助。我想也许我错过了什么,所以这里。

我的项目是创建一个用于管理桌面角色扮演游戏的DM工具。我需要能够将我的项目拆分成许多不同的文件,以保持一切井井有条。 (到目前为止)我只有三个我正在尝试使用的文件。我有我的主文件,我称之为dmtool.py3,我有一个名为classdef.py3的类定义文件,我有一个文件用于创建名为races.py3的种族对象。

1] 我的第一个问题是关于导入单个文件。我尝试用几种不同的方式组织文件,所以为此我假设我的三个文件都在同一个目录中。

如果我想将classdef.py3中的类定义导入到我的主文件dmtool.py3中,我该怎么做? import classdefimport classdef.py3似乎无法正常说明他们不是那个名字的模块。

2] 所以我做了一个模块,它似乎工作了。我这样做是通过创建一个名为defs的子目录并将classdef.py3和races.py3文件放入其中。我创建了__init__.py3文件,并将import defs放入dmtool.py3。作为测试,我将x = 1放在races.py3的最顶部,并将print("X =", defs.x)放在dmtool.py3中。我得到一个错误,说该模块没有属性x。

所以我想我的第二个问题是,是否可以只使用其他文件中的变量。我会使用defs.xdefs.races.xraces.x或简称x之类的内容吗?我似乎无法找到有效的那个。我需要解决这个问题,因为我将使用将在races.py3文件中定义的类的特定实例。

3] 我的第三个问题是一个简单的问题,它来自前两个问题。现在races.py3classdef.py3位于同一模块中,如何让一个访问另一个模块。 races.py3必须使用classdef.py3中定义的类。

我真的很感激任何帮助。就像我说的那样,我尝试查找与导入相关的其他问题,但是他们的简单解决方案似乎提出了相同的错误。我没有发布我的特定文件,因为除了我提到的,只有非常简单的打印行或类定义。什么都不应该影响导入。

谢谢, 克里斯

2 个答案:

答案 0 :(得分:1)

首先,不要将.py3 用作文件扩展名。 Python无法识别它。

Python 3的导入系统实际上非常简单。 import foo查看sys.path,查找名为foo的包(目录)或模块(.py文件)。

sys.path包含您通常会安装库的各种标准目录,以及Python标准库。 sys.path的第一个条目通常是__main__脚本所在的目录。如果以python -m foo.bar调用Python,则第一个条目将是包含foo包的目录。

相对导入使用不同的语法:

from . import foo

这意味着“从包含当前模块的包中导入foo模块或包。”在PEP 328中对此进行了详细讨论,如果您不想为每次导入指定包的整个结构,则会非常有用。

答案 1 :(得分:0)

启动python并输入以下命令:

>>> import sys
>>> sys.path

该路径是python查找库的目录列表。如果您的模块不在列表中,则找不到任何模块。