python_反射:动态导入模块
官方推荐方法:
test_mod.py
def hi():
print('Hi')
test.py
import importlib
q = importlib.import_module('test_mod') #动态导入模块
q.hi()

如果导入文件夹下面的模块引号内可以这样:目录.模块名
q = importlib.import_module('app.test_mod') #动态导入模块
调用的模块:lib文件夹下面的commons.py
def f1():
print('函数1') def f2():
print('函数2') def f3():
print('函数3')
反射:根据用户输入字符导入模块并调用模块中的方法
import os yhf = 'lib' def wdc():
inp = input('请输入(模块名/方法名):')
# 将输入的字符串根据‘/’分割,并分别赋值给m和f
try:
m,f = inp.split('/')
# 检测是要导入的模块是否存在
except Exception:
print('输入格式不正确!')
else:
if os.path.exists(yhf + '/' + m + '.py'): # 根据字符串导入模块,若导入文件夹下面的模块,需要后面添加fromlist=True
obj = __import__(yhf + '.' + m, fromlist=True)
# 检测模块中是否存在成员(模块,成员名),返回 T/F
if hasattr(obj, f):
# 根据字符串的形式去对象(模块)中寻找成员。返回成员名
func = getattr(obj, f) # (模块,用户输入的字符串)
# 执行方法
func()
else:
# 当方法名输入错误时
print('没有找到该方法!')
else:
print('不存在此模块!') wdc()
执行结果:

四个方法:
delattr() 根据字符串删除方法
setattr() 根据字符串创建方法
hasattr() 根据字符串检测方法是否存在
getattr() 根据字符串寻找方法
python_反射:动态导入模块的更多相关文章
- python 反射 动态导入模块 类attr属性
1.反射 hasattr getattr delattr setattr 优点:事先定义好接口,接口只有在被完成后才能真正执行,这实现了即插即用,这其实是一种“后期绑定”,即先定义好接口, 然后是再去 ...
- Python 实现接口类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)
实现接口类的两种方式 方式一 from abc import ABCMeta from abc import abstractmethod class BaseMessage(metaclass=AB ...
- Python 实现抽象类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)
实现抽象类的两种方式 方式一 from abc import ABCMeta from abc import abstractmethod class BaseMessage(metaclass=AB ...
- 封装,封装的原理,Property ,setter ,deleter,多态,内置函数 ,__str__ , __del__,反射,动态导入模块
1,封装 ## 什么是封装 what 对外隐藏内部的属性,以及实现细节,并给外部提供使用的接口 学习封装的目的:就是为了能够限制外界对内部数据的方法 注意 :封装有隐藏的意思,但不是单纯的隐藏 pyt ...
- Python3学习之路~7.4 动态导入模块
动态导入模块就是只知道str类型的模块名字符串,通过这个字符串导入模块. 准备: 首先创建一个模块目录lib,然后在目录内创建一个模块 aa.py: # aa.pyclass C: def __ini ...
- 面向对象【day08】:动态导入模块(八)
本节内容 1.概述 2.知识回顾 3.动态导入模块 一.概述 我们之前导入模块都是用import,或者from ... import ....这种模式去导入模块,那如果我们如何实现只用字符串就可以导入 ...
- python------Socket网略编程+动态导入模块
上节课程回顾: 静态变量:与类无关,不能访问类里的任何属性和方法. 类方法:只能访问类变量. 属性:把一个方法变成静态属性, 反射: __new__:先于__init__执行: __call__: c ...
- 动态导入模块:__import__、importlib、动态导入的使用场景
相关内容: __import__ importlib 动态导入的使用场景 首发时间:2018-02-23 16:06 __import__: 功能: 是一个函数,可以在需要的时候动态导入模块 使用: ...
- python学习之-- 动态导入模块
python 动态导入模块方法1: __import__ 说明: 1. 函数功能用于动态的导入模块,主要用于反射或者延迟加载模块. 2. __import__(module)相当于import mod ...
随机推荐
- Python中最常见的10个问题(列表)
列表是Python中使用最多的一种数据结果,如何高效操作列表是提高代码运行效率的关键,这篇文章列出了10个常用的列表操作,希望对你有帮助. 1.迭代列表时如何访问列表下标索引 普通版: items = ...
- 串口(USART)框图的讲解
STM32 的 USART 简介 通用同步异步收发器(Universal Synchronous Asynchronous Receiver and Transmitter)是一个串行通信设备,可以灵 ...
- golang以服务方式运行
golang开发的二进制程序,一般需要长期后台运行的,在linux上可以用supervisor或upstart或systemd等第三方守护进程来实现.其实golang自己也可以实现以服务的形式常驻后台 ...
- Ubuntu Server 18.04 无法修改 hostname
对于运维而言,我们希望每台服务器的 hostname 都能体现出它自己的功能/ip,方便排查. ubuntu server live 18.04 的安装流程非常友好,从 ip 到 hostname 都 ...
- linux重启php服务
- Docker使用整理
Docker技术的基础: namespace,容器隔离的基础,保证A容器看不到B容器. 6个名空间:User,Mnt,Network,UTS,IPC,Pid cgroups,容器资源统计和隔离.主要用 ...
- python练习:函数3
习题: 用lambda和filter完成下面功能:输出一个列表,列表里面包括:1-100内的所有偶数.(提示:可以用filter,lambda) [ x for x in range(1,101) i ...
- vue elment table根据返回值修改样式
今天在写vue项目的时候,查询出的数据库的数据想根据条件修改显示.查询资料有一个 :formatter,可以实现这个效果,废话不多说,这个是我的例子: <el-table-column prop ...
- tint2
#---------------------------------------------# TINT2 CONFIG FILE#---------------------------------- ...
- 漏洞预警 | ThinkPHP 5.x远程命令执行漏洞
ThinkPHP采用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库).RoR的ORM映射和ActiveRecord模式,是一款兼容性高.部署简单的轻量级国产PHP开发框 ...