动态导入--python

写在前面

动态导入主要应用于临时导入一个模块。好久不用,忘得一干二净,写个帖子记录下。

工程结构:

我想在main_module.py中使用packet1的dog模块的类/方法/变量

test:
    main_module.py
    packet1
        __init__.py
        dog.py
    packet2
        __init__.py
        dog.py 

1- 写死模块名字动态导入

main_module.py

import_pack_name = importlib.import_module(包名字),返回的是包下面__init__.py中需要导入的类/方法/变量信息,之后就可以使用import_pack_name.类/方法/变量.

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import importlib
pkg_name = "pack1"
class_name = "Dog"
import_pack_name = importlib.import_module(pkg_name)
dog = import_pack_name.Dog()
dog.dog_print()
import_pack_name.pack_dog()
import_pack_name.dog_val

packet1.__init__.py(重要

填写需要导出的模块、类、方法、变量

from pack1.dog import Dog
from pack1.dog import pack_dog
from pack1.dog import dog_val

packet1.dog.py

#!/usr/bin/python
# -*- coding: UTF-8 -*-

class Dog():
    def __init__(self):
        print("pack1.dog: __init__")
    def dog_print(self):
        print("pack1.dog: dog_print")

def pack_dog():
    print("pack1.dog: pack_dog()")

dog_val = "pack1.dog: dog_val"

2- 使用getter从获取需要导出的类、函数、变量

main_module.py

使用getattr获取对象的属性。这里我们填入包导出的信息对象和类/方法/变量名字,即可返回类/方法/变量的对象。

注意:对于返回的类对象,需要先实例化再使用

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import importlib
pkg_name = "pack1"
class_name = "Dog"
func_name = "pack_dog"
val_name = "dog_val"
import_pack_name = importlib.import_module(pkg_name)
import_class = getattr(import_pack_name, class_name)
import_func = getattr(import_pack_name, func_name)
import_val = getattr(import_pack_name, val_name)
dog = import_class()
dog.dog_print()
import_func()
print(import_val)

packet1.__init__.py、packet1.dog.py 同前。

参考:https://blog.csdn.net/mouday/article/details/84062182

https://blog.csdn.net/edward_zcl/article/details/88809212

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值