zoukankan      html  css  js  c++  java
  • 面向对象【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 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这种方式是官方推荐的,用起来比较简单,而且导入到那哪里就到哪里,极力推荐
  • 相关阅读:
    JS实例
    第一章 机器学习基础
    事件与信号
    微信公众号开发实例
    php学记笔记之函数用途
    php漏洞修复 禁用函数
    删除MYSQL账号多于的空用户
    MySql 建表、添加字段、修改字段、添加索引SQL语句写法
    php对二维数据进行排序
    iis支持IPA和APK文件下载
  • 原文地址:https://www.cnblogs.com/luoahong/p/9895918.html
Copyright © 2011-2022 走看看