接着上一篇文章最后的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 语句资源搜索顺序 (三)的更多相关文章

  1. Python 模块化 from .. import 语句介绍 (二)

    from语句 例一. from pathlib import Path,PosixPath print(dir()) print(Path) print(PosixPath) 运行结果: ['Path ...

  2. Python中的import语句

    Python中的import语句是导入一个文件,这条语句主要做三件事: 1 通过一定的方式,搜寻要导入的文件: 2 如果需要,就编译这个文件: 3 运行这个文件 但是,需要注意的是,所有这三个步骤,都 ...

  3. Python中from … import …语句

    from - import -语句可以让你从模块中导入一个指定的部分到当前模块

  4. python的import语句

    1.import作用 import跟C/C++中的#include作用有点类似,都是为了调用定义在其他文件中的变量.函数或者类,但实现的区别很大. C/C++中如果a.cpp include了b.h那 ...

  5. Python import语句导入模块语法[转]

    Python import语句导入模块语法 社区推荐:掘金是国内最活跃的技术社区,我们每日有优质Python开发实例分享,海量python开源库推送.来掘金,和更多懂技术的小伙伴交流.   pytho ...

  6. python初步学习-import和datetime模块

    模块 一个完整大型的python程序是由模块和包的形式组织起来的,可见模块在python中的重要性.模块是一种组织型式,它许多有关联(关系)的代码组织放到单独的独立文件中.简单的说,可以把模块理解为一 ...

  7. Python 模块化 模块搜索顺序、重复导入、模块加载列表(五)

    模块搜索顺序.重复导入.模块加载列表 0x00 模块搜索顺序: 举例: #test.py import sys for p in sys.path: print(p) 运行结果: C:\python ...

  8. python常有模块:模块、引入语法、两种执行方式、模块搜索顺序

    今天主要讲了以下几点:一.模块三问.定义及分类二.import和from的语法三.文件的两种执行方式及搜索顺序四.内置函数 一.模块.import和from的语法 1.什么是模块   模块是一堆功能函 ...

  9. Python - 面向对象编程 - MRO 方法搜索顺序

    为什么会讲 MRO? 在讲多继承的时候:https://www.cnblogs.com/poloyy/p/15224912.html 有讲到, 当继承的多个父类拥有同名属性.方法,子类对象调用该属性. ...

随机推荐

  1. [javaSE] 数据结构(队列)

    队列是一种线性存储结构,他有以下特点: 1.队列中数据是按照“先进先出”方式进出队列的 2.队列只允许在“队首”进行删除操作,在“队尾”进行插入操作 3.队列通常包含两种操作:入队列和出队列 使用数组 ...

  2. OpenGL绘制一个三角形

    应该建立一个vertex shader文件和一个pixel shader文件,分别命名为shader.vsh和shader.fsh. shader.vsh: attribute vec3 positi ...

  3. Linux**系统实现log日志自动清理

    Linux系统实现log日志自动清理 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...

  4. Shiro官方快速入门10min例子源码解析框架1-初始化

    Shiro,一个易用的Java安全框架,主要集合身份认证.授权.加密和session管理的功能. 这系文章主要简介Shiro架构,并通过官方的quickstart例程分析最简实现下Shiro的工作流程 ...

  5. 【SSH网上商城项目实战24】Struts2中如何处理多个Model请求

       转自: https://blog.csdn.net/eson_15/article/details/51465067 1. 问题的提出 Struts2中如果实现了ModelDriven<m ...

  6. 【SSH网上商城项目实战07】Struts2和Json的整合

    转自:https://blog.csdn.net/eson_15/article/details/51332758 上一节我们完成了DataGrid显示jason数据,但是没有和后台联系在一起,只是单 ...

  7. poj 1811 Prime Test 大数素数测试+大数因子分解

    Prime Test Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 27129   Accepted: 6713 Case ...

  8. EF框架CodeFirst the model backing the 'PModelEntities' context has changed since the database was created. Consider using Code First Migrations to update the database

    1.采用code first 做项目时,数据库已经生成,后期修改数据库表结构.再次运行时出现一下问题: Entity Framework : The model backing the 'Produc ...

  9. sql:Mysql create view,function,procedure

    create database Liber; use Liber; #顯示數据庫 20150210 Geovin Du 涂聚文 SHOW DATABASES; drop table BookKindL ...

  10. JSON和JSONP 实例

    来源:http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html 前言: 说到AJAX就会不可避免的面临两个问 ...