接着上一篇文章最后的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. java自学之路-开篇

    开篇 想写一些java自学文章的心思起好久了,也在心里规划了一段时间,今天终于开始正式付于纸上.接下来要写的内容从java基础开始,一步步到正式工作用到的技术,整个体系适合java初学者自学.内容可能 ...

  2. 集群搭建之Spark配置要点解析

    注意点: 安装Spark前先要配置好Scala运行环境. Spark和Scala需要在各个机器上配置. 环境变量配置 在~/.bashrc中添加如下的配置信息. #scala conf export ...

  3. input一些验证

    这篇博文大部分来自于网上,为了方便自己查阅,以及帮助他人. 1.正则验证只能输入正整数:  onkeyup = " if (this.value.length==1) { this.valu ...

  4. js实现toFixed截取效果

    Number.prototype.toFixed = function(fractionDigits) { ; || f > ) { throw new RangeError("Pre ...

  5. Kafak Confluent

  6. The difference between a local variable and a member variable

    package com.itheima_04; /* * 成员变量和局部变量的区别: * A:在类中的位置不同 * 成员变量:类中,方法外 * 局部变量:方法中或者方法声明上(形式参数) * B:在内 ...

  7. MUI框架-04-切换页面头部文字重叠

    MUI框架-04-切换页面头部文字重叠 从现在开始就只分享 MUI 框架开发时遇到的问题了 开发不懂请查看:官方文档 问题情况 切换页面 title 文字重叠,覆盖 截图: 解决办法 给 h1 标签加 ...

  8. 你真的了解Fragment的生命周期吗?

    Android Framwork开发人员中的传奇人物Dianne Hackborn在2010年将Fragment引入了Android,也就是在android3.0之后引入Fragment,他在提交信息 ...

  9. Monkey测试运用实例

    测试命令是多样性的,根据个人的测试思路,设计执行你想要的测试命令 1.monkey -p com.junte -v 1000          团贷网模拟用户随机操作,无延时点击1000次 -p测试包 ...

  10. centos django+Nginx+uwsgi部署

    第五天 部署python3+uwsgi+nginx的博客系统 ================================ mysql基本命令 mysql mysql -p mysqladmin ...