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这种方式是官方推荐的,用起来比较简单,而且导入到那哪里就到哪里,极力推荐
  • 相关阅读:
    【SQL Server学习笔记】Service Broker创建异步的、数据驱动的消息应用程序
    记录几句不错的话
    DBA最缺的不是技术
    小数点引起的数据类型转换问题
    hdu 3062 2SAT最基础题
    POJ 1679 判断最小生成树是否唯一
    POJ 1459 构图+最大流(Edmond_karp模版)
    POJ 3522 最大边与最小边差值最小的生成树
    POJ 1659 根据度序列构图
    POJ 1273 求最大流(Edmond_karp模板题)
  • 原文地址:https://www.cnblogs.com/luoahong/p/9895918.html
Copyright © 2011-2022 走看看