面向对象【day08】:动态导入模块(八)
本节内容
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 importlibmod = 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 |
总结:
- __import__方式是python内置函数,是python自己用的,而且知道第一层,所以极力不推荐
- importlib这种方式是官方推荐的,用起来比较简单,而且导入到那哪里就到哪里,极力推荐
面向对象【day08】:动态导入模块(八)的更多相关文章
- 封装,封装的原理,Property ,setter ,deleter,多态,内置函数 ,__str__ , __del__,反射,动态导入模块
1,封装 ## 什么是封装 what 对外隐藏内部的属性,以及实现细节,并给外部提供使用的接口 学习封装的目的:就是为了能够限制外界对内部数据的方法 注意 :封装有隐藏的意思,但不是单纯的隐藏 pyt ...
- Python 动态导入模块
动态导入模块 目录结构: zhangsandeMacBook-Air:1110 zhangsan$ tree . . ├── lib │ └── aa.py ├── test1.py lib目录下 ...
- Python 实现接口类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)
实现接口类的两种方式 方式一 from abc import ABCMeta from abc import abstractmethod class BaseMessage(metaclass=AB ...
- Python3学习之路~7.4 动态导入模块
动态导入模块就是只知道str类型的模块名字符串,通过这个字符串导入模块. 准备: 首先创建一个模块目录lib,然后在目录内创建一个模块 aa.py: # aa.pyclass C: def __ini ...
- Python importlib(动态导入模块)
使用 Python importlib(动态导入模块) 可以将字符串型的模块名导入 示例: import importlib module = 'module name' # 字符串型模块名 test ...
- python------Socket网略编程+动态导入模块
上节课程回顾: 静态变量:与类无关,不能访问类里的任何属性和方法. 类方法:只能访问类变量. 属性:把一个方法变成静态属性, 反射: __new__:先于__init__执行: __call__: c ...
- 动态导入模块:__import__、importlib、动态导入的使用场景
相关内容: __import__ importlib 动态导入的使用场景 首发时间:2018-02-23 16:06 __import__: 功能: 是一个函数,可以在需要的时候动态导入模块 使用: ...
- python 反射 动态导入模块 类attr属性
1.反射 hasattr getattr delattr setattr 优点:事先定义好接口,接口只有在被完成后才能真正执行,这实现了即插即用,这其实是一种“后期绑定”,即先定义好接口, 然后是再去 ...
- Python3 动态导入模块的两种方式
动态导入模块就是只知道str类型的模块名字符串,通过这个字符串导入模块 需要导入的模块: #!/usr/bin/env python # _*_ coding:utf-8 _*_ # Author:C ...
随机推荐
- Git——简说.git目录【五】
我们都知道初始化项目时,会生成一个.git的隐藏目录,那么这个目录究竟放了那些东西呢,又有什么作用呢?现在我们就来看看. HEAD HEAD指向的是当前工作所在的分支 $ cat HEAD ref: ...
- Django ContentType组件
ContentType组件 引入 现在我们有这样一个需求~我们的商城里有很多的商品~~节日要来了~我们要搞活动~~ 那么我们就要设计优惠券~~优惠券都有什么类型呢~~满减的~折扣的~立减的~~ 我们对 ...
- 洛谷P1582 倒水题解
题目 分析 这个题并不难,只是需要仔细思考我们首先可以很轻松的把这个题给疏通一下题意. 1:首先我们最后每个瓶子中装的水一定是一个$2^x$,因为每次都是$2$倍的加,这个应该很好理解. 2:我们要明 ...
- 自学Zabbix4.0之路
自学Zabbix4.0之路 01 Centos7安装Zabbix4.0步骤 02 Centos7下Zabbix3.4至Zabbix4.0的升级步骤 03 Zabbix4.0添加cisco交换机基本监控 ...
- STL之set和map
by attack666 set与map map 内部实现是一棵红黑树 定义 key和value分别对应着两种类型 map<key, value> mp; 内部函数 直观的理 ...
- 使用unittest单元测试框架对加法做单元测试
import unittest from parameterized import parameterized def cacl(a, b): return a+b class MyCacl(unit ...
- SSH防暴力破解脚本
crontab -e 编辑添加一下内容 1 1 * * * sh /root/bin/Denyhosts.sh 脚本内容 #!/bin/bash #Denyhosts SHELL SCRIPT #20 ...
- QML学习笔记(一)-防止鼠标穿透事件
作者: 狐狸家的鱼 Github: 八至 1.防止鼠标穿透 MouseArea{ anchors.fill: parent; onClicked: {}; onReleased: {}; onPres ...
- bzoj2194 快速傅里叶之二
题意:对于k = 0 ... n求 解: 首先把i变成从0开始 我们发现a和b的次数(下标)是成正比例的,这不可,于是反转就行了. 反转b的话,会发现次数和是n + k,这不可. 反转a就很吼了. 这 ...
- A1124. Raffle for Weibo Followers
John got a full mark on PAT. He was so happy that he decided to hold a raffle(抽奖) for his followers ...