Python同名包和模块如何处理

问题

不久前运行项目时遇到了一个问题,这里抽象出来研究一下。对于操作系统来说一个文件夹下可以同时存在一个名为test的文件夹和一个名为test.txt的文件,但是对于python而言,如果在项目的某一个文件夹下同时存在一个名为test的包和一个名为test.py的模块,显然在导包时会存在一个问题,根据python导包语法,两者导包方式一摸一样,那么会导入哪一个还是说会报错呢?而且更进一步,假设本身就有一个内置的模块,此时我定义同名模块和包,会如何?

我直接放答案

优先级为:内置模块 > 自定义包 > 自定义模块

实验一,自定义test包和test.py模块

test/__init__.py

TEST_STR = "test-package"

test.py

TEST_STR = "test-module"

main.py

from test import TEST_STR
print(f"test: {TEST_STR}")

结果为:

test: test-package

显然,导的是包

实验二,自定义math包和math.py模块

内置模块中有同名math的,其中有函数sqrt用以进行开方运算
math/__init__.py

def sqrt(i):
    return f"math-package {i}"

math.py

def sqrt(i):
    return f"math-module {i}"

main.py

from math import sqrt
print(f"math: {sqrt(64)}")

结果为:

math: 8.0

显然,导的是内置模块

思考三,三方模块与自定义模块

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码

)">
< <上一篇

)">
下一篇>>