zoukankan      html  css  js  c++  java
  • Python概念-反射之文化底蕴版:反正射了

    什么是反射

    光在两种物质分界面上改变传播方向又返回原来物质中的现象,叫反射!

    以上,是反射的物理定义,与python中的反射概念,完全没有任何关系

    书归正传:反射

    就是通过字符串的形式,操作对象相关的属性

    反射的相关函数:

    hasattr(object,"name")
    #返回bool类型,判断object的命名空间中是否存在name这个名字
    #存在返回True
    #不存在返回Flase
    obj = getattr(object,"name")
    #获得Object中名称为name的内存地址
    #name可以是一个方法,也可以是一个属性
    setattr(Object,"name","egon")
    #在Object中添加一个name名字,并赋值egon
    #在Object的__dict__中就可以看到{"name":"egon"}了
    delattr(Object,"name")
    #在Object中删除名称为name的内存地址

    为什么要用反射,反射有什么优势

    实现可插拔机制

    例如:程序员A负责写模块,程序员B负责调用,当程序员A的模块没有完成,程序员B依然可以将代码完成,而且与程序员A的工作不相冲突

    代码示例:

    1 # 编辑者:闫龙
    2 class ftpc:
    3     def __init__(self,x):
    4         print("come no baby",x)
    5     def getFile(self):
    6         print("反正里面有文件")
    7     def upFile(self):
    8         print("你就当上传成功了一个叫FuckEgon的文件")
    程序员A的未完成模块
     1 # 编辑者:闫龙
     2 import FtpClient
     3 class FtpS:
     4     def __init__(self):
     5         print("服务端已开启")
     6     def Go(self):
     7         ftpc = FtpClient.ftpc("egon")
     8         while True:
     9             userin = input(">>>:")
    10             if(hasattr(ftpc,userin)):#在这里就是判断程序员A未完成的代码中是否存在某方法,如果存在则执行,不存在则提示指令错误
    11                 ftpp = getattr(ftpc,userin)
    12                 ftpp()
    13             else:
    14                 print("指令错误")
    15                 continue
    16 
    17 f = FtpS()
    18 f.Go()
    程序员B的实现

    动态导入模块

    我们在导入模块的时候会用到Import 模块名,而这个模块名并不是一个字符串,那么使用应的好处就是可以对应字符串转成相应的模块

    代码示例:

     1 #官方推荐版:egon坑货版
     2 import importlib #导入一个improtlib模块
     3 Choice = input(">>>")#获取用户输入的信息(模块名字)
     4 importlib.import_module(Choice)#将用户输入的字符串变成模块的名字并导入模块
     5 
     6 #矮根儿先入为主版:官方根本不推荐,但是如果你非要这么写的话,请在写之前注明:
     7 #<林海峰教的>
     8 Choice = input(">>>")#获取用户输入的信息(模块名字)
     9 __import__(Choice)#将用户输入的字符串变成模块的名字并导入模块
    10 #</林海峰教的>
  • 相关阅读:
    C语言扩展题
    C语言第五题
    C语言第四题
    C语言第三题
    c语言第二题
    11
    游戏开发的一些想法
    openxml的视频教程
    JavaScript调试之console.log
    IPPatternConverter
  • 原文地址:https://www.cnblogs.com/DragonFire/p/6757432.html
Copyright © 2011-2022 走看看