1. 问题描述
现有a.py文件,其中包含一个Test类如下:
# a.py
class Test:
result: str
def __init__(self, result):
self.result = result
此外,还有一个aa.py文件,想要使用a.py中的Test类创建一个对象,并打印出对象的内容,如下:
# aa.py
<导入a.py中的类>
x = Test("a->aa success")
print(x.result)
2. Case1-同一目录
若a.py和aa.py在同一目录时,直接导入即可。
- 目录结构:
- 代码
a.py的内容同上,此处不再重复粘贴代码。
aa.py需要修改为:
# aa.py
from a import Test
x = Test("a->aa success")
print(x.result)
- 运行程序
进入AA目录,使用python命令行运行脚本。
可以看出使用python aa.py
运行完程序后,新增了一个 __pycache__目录,目录中的内容如下:
pychae里缓冲了相对应模块的编译版,能够加快模块的加载速度,详情参见官方文档。
3. Case2-不在同一目录(简单情况)
- 目录结构
- 代码
a.py的内容同上,保持不变。
由于a.py和aa.py目前不在同一目录下,需要使用相对路径导入a.py中的Test类,故aa.py需要修改为:
# aa.py
from ..a import Test
x = Test("a->aa success")
print(x.result)
- 运行程序
此时,若仍按照原来的方法运行程序,会报错。
解决方法:
回到顶级目录!回到顶级目录!回到顶级目录!使用python -m A.AA.aa
运行程序。
4. Case3-不在同一目录(复杂情况)
- 目录结构
- 情况描述
a.py:包含Test类,并打印In a.py
aa.py:包含Try类,并创建了一个Test类的对象,打印a->aa success
aaa.py:创建Test类和Try类的实例,分别打印a->aaa success
和aa->aaa success
- 运行程序
在顶级目录执行命令python -m A.AA.AAA.aaa
,运行结果如下:
我们原本只想执行aaa.py程序,打印a->aaa success
和aa->aaa success
。但实际运行结果中,将a.py和aa.py中的内容也打印出来了(相当于也运行了a.py和aa.py),这与我们的期待结果不符。
解决方法:
使用if __name__ == “__main__”
来规范程序。
修改后的代码及运行结果如下:
此时使用python -m A.AA.AAA.aaa
运行程序aaa.py时,只打印了aaa.py想要输出的内容。这是因为,当使用命令行执行aaa.py时,该文件/模块的内置属性__name__
会变成__main__
,一般情况下,文件/模块的__name__
同文件/模块名一致。
5. 扩展内容-运行python项目
目录结构:
在包里新增__init__.py
和__main__.py
文件,从而可以在顶级目录处,通过python -m A
运行整个项目A。
项目代码:
链接: https://pan.baidu.com/s/1fNqvzwE8SVdR5XNvjRdI2g 提取码: 5kny
乏了QAQ