本节内容

1、概述

2、知识回顾

3、动态导入模块

一、概述

  我们之前导入模块都是用import,或者from ... import ....这种模式去导入模块,那如果我们如何实现只用字符串就可以导入模块呢?我们下面就来说说如何动态导入模块,这个东西还是蛮有用的,通过字符串就可以导入,很方便。

二、知识回顾

静态方法:

  与类无关,不能访问类里的任何属性和方法

类方法:

  只能访问类变量

属性(@property):

  把一个方法变成一个静态属性,例:flight.status->@status.setter->flight.status = 3->@status.delter

反射:

  getattr(obj,str),hasattr(obj,str),setattr(obj,str),delattr(obj,str)

三、动态导入模块

前置条件:需要导入的模块的目录结构

3.1、__import__方式

说明:这种方式只能到第一层级别

1
2
3
4
5
6
7
8
9
mod = __import__("lib.aa")
print(mod)  #打印模块信息
c_instance = getattr(mod.aa,"C")#或者写成c_instance = mod.aa.C()
c_obj = c_instance()
print(c_obj.name)
 
#输出
<module 'lib' from 'D:\\PycharmProjects\\pyhomework\\day8\\回顾上节\\lib\\__init__.py'#只导入lib级别
zhangqigao

3.2、importlib方式

说明:这种方式比较好,也是官方推荐的,它能助学导入到最后一个层级,就是你导入的哪个模块就到哪个层级

1
2
3
4
5
6
7
8
9
10
import importlib
mod = importlib.import_module("lib.aa")
print(mod)  #打印导入模块信息
c_instance = mod.C #又可写成 c_instance = getattr(mod,"C")
c_object = c_instance()
print(c_object.name)
 
#输出
<module 'lib.aa' from 'D:\\PycharmProjects\\pyhomework\\day8\\回顾上节\\lib\\aa.py'>#到aa.py级别
zhangqigao

总结:

  1. __import__方式是python内置函数,是python自己用的,而且知道第一层,所以极力不推荐
  2. importlib这种方式是官方推荐的,用起来比较简单,而且导入到那哪里就到哪里,极力推荐

面向对象【day08】:动态导入模块(八)的更多相关文章

  1. 封装,封装的原理,Property ,setter ,deleter,多态,内置函数 ,__str__ , __del__,反射,动态导入模块

    1,封装 ## 什么是封装 what 对外隐藏内部的属性,以及实现细节,并给外部提供使用的接口 学习封装的目的:就是为了能够限制外界对内部数据的方法 注意 :封装有隐藏的意思,但不是单纯的隐藏 pyt ...

  2. Python 动态导入模块

    动态导入模块 目录结构: zhangsandeMacBook-Air:1110 zhangsan$ tree . . ├── lib │   └── aa.py ├── test1.py lib目录下 ...

  3. Python 实现接口类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)

    实现接口类的两种方式 方式一 from abc import ABCMeta from abc import abstractmethod class BaseMessage(metaclass=AB ...

  4. Python3学习之路~7.4 动态导入模块

    动态导入模块就是只知道str类型的模块名字符串,通过这个字符串导入模块. 准备: 首先创建一个模块目录lib,然后在目录内创建一个模块 aa.py: # aa.pyclass C: def __ini ...

  5. Python importlib(动态导入模块)

    使用 Python importlib(动态导入模块) 可以将字符串型的模块名导入 示例: import importlib module = 'module name' # 字符串型模块名 test ...

  6. python------Socket网略编程+动态导入模块

    上节课程回顾: 静态变量:与类无关,不能访问类里的任何属性和方法. 类方法:只能访问类变量. 属性:把一个方法变成静态属性, 反射: __new__:先于__init__执行: __call__: c ...

  7. 动态导入模块:__import__、importlib、动态导入的使用场景

    相关内容: __import__ importlib 动态导入的使用场景 首发时间:2018-02-23 16:06 __import__: 功能: 是一个函数,可以在需要的时候动态导入模块 使用: ...

  8. python 反射 动态导入模块 类attr属性

    1.反射 hasattr getattr delattr setattr 优点:事先定义好接口,接口只有在被完成后才能真正执行,这实现了即插即用,这其实是一种“后期绑定”,即先定义好接口, 然后是再去 ...

  9. Python3 动态导入模块的两种方式

    动态导入模块就是只知道str类型的模块名字符串,通过这个字符串导入模块 需要导入的模块: #!/usr/bin/env python # _*_ coding:utf-8 _*_ # Author:C ...

随机推荐

  1. Maven添加Web.xml的方法

    当创建maven工厂时没有web.xml文件1.点击你的项目名称,进入到Myeclipse的-- Project Facets上,2.点击Dynamic Web Module 和下面的Java,将两个 ...

  2. BZOJ1449[JSOI2009]球队收益&BZOJ2895球队预算——最小费用最大流

    题目描述 输入 输出 一个整数表示联盟里所有球队收益之和的最小值. 样例输入 3 3 1 0 2 1 1 1 10 1 0 1 3 3 1 2 2 3 3 1 样例输出 43 提示   要求总费用最低 ...

  3. Redis——windows下如何连接Linux(centos7.x)虚拟机的Redis——【二】

    我的虚拟网络使用的是桥接网络和windows主机IP为同一网段,做下面步骤之前请确保网络通畅. 使用cmd的ping来测试 软件 https://redisdesktop.com/download 下 ...

  4. Vue 计算

    目标:字段c=字段a+字段b 方法1 直接使用Mustache(胡子表达式) <body> <div id="example" > <input v- ...

  5. sublime3添加verilog自动补全代码段

    前言 sublime默认的verilog自动补全十分垃圾,不过提供了代码段这个功能,你可以自己写个重用率高的代码段减轻工作量.写个模板当tb也很爽啦. 流程 1.打开user文件夹,创建verilog ...

  6. codevs 2606 约数和问题 (数学+分块)

    题目描述 Description Smart最近沉迷于对约数的研究中. 对于一个数X,函数f(X)表示X所有约数的和.例如:f(6)=1+2+3+6=12.对于一个X,Smart可以很快的算出f(X) ...

  7. SpringMVC 拦截器使用说明

    spring-content.xml <!-- 配置用于session验证的拦截器 --> <!-- 如果有多个拦截器满足拦截处理的要求,则依据配置的先后顺序来执行 --> & ...

  8. python 识别验证码

    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/instal ...

  9. C语言学习记录之一

    1. while语句 2. 循环嵌套 3. 数组 4. 排序 1. while 由于上节课时间有限,介绍完for循环后没有来得及讲while语句.简单来讲,while也是一种循环结构,先看一个例子: ...

  10. webpack入门(二)what is webpack

    webpack is a module bundler.webpack是一个模块打包工具,为了解决上篇一提到的各种模块加载或者转换的问题. webpack takes modules with dep ...