Python 模块化 from .. import 语句资源搜索顺序 (三)
接着上一篇文章最后的import子句资源搜索顺序,我们来写几个例子了解下。
例一、
#test1.py
x = 123 #test.py
import test1
print(dir())
print(test1.x) 运行结果:
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'test1']
123
import 直接导入模块
#test.py
from test1 import x
print(dir())
print(x) 运行结果:
[..., 'x']
123
from .. import 部分导入
模块中定义的变量就是该模块的属性,就可以通过本例中的两种方法调用模块中的属性。
例二、
资源搜索顺序: 模块属性 --> 子模块 --> ImportError
|--m (包)
|__init__.py (x=456)
|--x (x是一个子模块)
|--__init__.py #m.__init__.py
x = 456 #m.x.__init__.py
print('x.__init__')
class A():
pass
1)该例子中定义了一个模块m,模块m中定义了一个属性x=456,也定义了一个名为x的子模块,子模块中定义了一个类A。
#test.py
from m import x
print(dir())
print(x) 运行结果:
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'x']
456
最终匹配到的是m模块下的属性x=456,并没有匹配到m子模块。
2)那我们把模块m的属性x去掉,再来运行test.py文件。
运行结果:
x.__init__
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'x']
<module 'm.x' from 'C:\\python\\m\\x\\__init__.py'>
可以看到当模块m没有属性x后,接着匹配到了子模块x,并输出了子模块x初始化定义的语句和模块信息。
3)那我们再把子模块也删除,再来运行test.py文件。
运行结果:
Traceback (most recent call last):
File "C:/python/test.py", line 1, in <module>
from m import x
ImportError: cannot import name 'x'
在没有匹配到属性和子模块时,即抛出了ImportError异常。
总结:
资源搜索顺序: 模块属性 --> 子模块 --> ImportError
Python 模块化 from .. import 语句资源搜索顺序 (三)的更多相关文章
- Python 模块化 from .. import 语句介绍 (二)
from语句 例一. from pathlib import Path,PosixPath print(dir()) print(Path) print(PosixPath) 运行结果: ['Path ...
- Python中的import语句
Python中的import语句是导入一个文件,这条语句主要做三件事: 1 通过一定的方式,搜寻要导入的文件: 2 如果需要,就编译这个文件: 3 运行这个文件 但是,需要注意的是,所有这三个步骤,都 ...
- Python中from … import …语句
from - import -语句可以让你从模块中导入一个指定的部分到当前模块
- python的import语句
1.import作用 import跟C/C++中的#include作用有点类似,都是为了调用定义在其他文件中的变量.函数或者类,但实现的区别很大. C/C++中如果a.cpp include了b.h那 ...
- Python import语句导入模块语法[转]
Python import语句导入模块语法 社区推荐:掘金是国内最活跃的技术社区,我们每日有优质Python开发实例分享,海量python开源库推送.来掘金,和更多懂技术的小伙伴交流. pytho ...
- python初步学习-import和datetime模块
模块 一个完整大型的python程序是由模块和包的形式组织起来的,可见模块在python中的重要性.模块是一种组织型式,它许多有关联(关系)的代码组织放到单独的独立文件中.简单的说,可以把模块理解为一 ...
- Python 模块化 模块搜索顺序、重复导入、模块加载列表(五)
模块搜索顺序.重复导入.模块加载列表 0x00 模块搜索顺序: 举例: #test.py import sys for p in sys.path: print(p) 运行结果: C:\python ...
- python常有模块:模块、引入语法、两种执行方式、模块搜索顺序
今天主要讲了以下几点:一.模块三问.定义及分类二.import和from的语法三.文件的两种执行方式及搜索顺序四.内置函数 一.模块.import和from的语法 1.什么是模块 模块是一堆功能函 ...
- Python - 面向对象编程 - MRO 方法搜索顺序
为什么会讲 MRO? 在讲多继承的时候:https://www.cnblogs.com/poloyy/p/15224912.html 有讲到, 当继承的多个父类拥有同名属性.方法,子类对象调用该属性. ...
随机推荐
- [FORWARD]ODBC 各种数据库连接串
Overview Generally, one of the first steps when you are trying to work with databases is open it. Yo ...
- 四、spark集群架构
spark集群架构官方文档:http://spark.apache.org/docs/latest/cluster-overview.html 集群架构 我们先看这张图 这张图把spark架构拆分成了 ...
- memcached 细究(二)
{ CentOS ping命令 分布式部署服务器时用到ping命令 #ping -c 4 192.168.16.1 //ping4次后结束. } 使用telnet 查看memcached 运行状态 ...
- php 在函数前面加个@的作用
@是错误控制运算符,用屏蔽错误提示比如:@mysql_connect() 不会出现Warning, 而原来mysql_connect 会在页面上访提示Warning.主要是高版本的php不在支持mys ...
- Reddit: 只有独生子女才明白的事
duhvorced: 对我来说,恋爱成了件异常艰难的事. 我一直很羡慕有兄弟姐妹的人,特别是有异性兄弟姐妹的.他们能够在成长过程中明白异性对身体.友情的看法,知道他们如何处理不安全感,如何应对同龄人之 ...
- CenOs7安装oracle图文详细过程(01)
原创作品,转载请在文章头部(显眼位置)注明出处:https://www.cnblogs.com/sunshine5683/p/10011441.html 1.检查必要的安装包是否安装 命令脚本: rp ...
- Hunger Snake3
- 简单Json序列化和反序列化
序列化是什么: 序列化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得.序列化分为两大部分:序列化和反序列化.序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络 ...
- cookie、session、分页
一.cookie HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后面的请求响应情 ...
- 什么是首字节时间(TTFB)
第一字节响应时间(TTFB)=从发送请求到WEB服务器的时间+WEB服务器处理请求并生成响应花费的时间+WEB服务器生成响应到浏览器花费的时间测量第一字节响应时间(TTFB)的工具:http://ww ...