zoukankan      html  css  js  c++  java
  • 反射和自省

    一、反射使用

    python是面向对象语言,其中反射的含义为:通过字符串的形式操作对相关的属性。
    python内置四个自省的方法:
    1、hasattr(object,name)
    2、getattr(object,name,default=None)
    3、setattr(object,key,value)
    4、delattr(object,item)
    注意:这里的key、name、item 都是字符串

    定义一个Shool类:

    class Shool:
        def __init__(self,name,addr):
            self.name =name
            self.addr =addr
    
        def room(self):
            print("这里有很多300间教室")
    
    

    hasattr举例

    s1 = Shool("中学","天通苑")#实例化
    print(hasattr(s1,"room"))#判断s1是否有room属性
    print(hasattr(s1,"name"))#判断s1是否有name属性
    print(hasattr(s1,"addr"))#判断s1是否有addr属性
    print(hasattr(s1,"addrname"))#判断s1是否有addrname属性
    

    执行结果

    True
    True
    True
    False
    

    getattr举例

    res1 = getattr(s1,"name")
    res2 = getattr(s1,"addr")
    res3 = getattr(s1,"room")
    res4 = getattr(s1,"addroom", "没有这个属性")
    print(res1)
    print(res2)
    print(res3)
    print(res4)
    
    

    执行结果

    中学
    天通苑
    <bound method Shool.room of <__main__.Shool object at 0x105d710f0>>
    没有这个属性
    

    setattr举例

    print(s1.name)
    setattr(s1,"name","大学") # 修改了s1.name
    print(s1.name)
    setattr(s1,"square",23000) #没有square,就新建一个square属性
    print(s1.square)
    

    执行结果

    中学
    大学
    23000
    

    delattr举例

    res1 = getattr(s1,"square")
    delattr(s1,"square")
    res2 = getattr(s1,"square","这个属性没有了")
    print(res1)
    print(res2)
    
    

    执行结果

    23000
    这个属性没有了
    

    对象可以使用这四个方法外,也可以使用这些方法。同上

    补充:模块也可以通过反射,查看是否存在某个方法。

    import sys
    this_module = sys.modules[__name__] # 获取当前的模块名
    

    二、作用和好处

    1、实现可插拔机制:相互依赖的两个py执行文件,可以通过这个方式协同工作
    2、动态导入模块:

    import importlib
    importlib.import_module("import_lib.metaclass")
    
    
  • 相关阅读:
    制作SD(8G)卡Linux镜像,使得ZC706开发板可以从SD卡启动进入Linux系统
    微信小程序学习
    linux 驱动 printk 输出变量格式
    linux驱动- PCI-E设备驱动-PCIE设备结构体
    ubuntu 14.04 root登录
    Linux 应用程序 网络通讯函数记录
    linux 驱动学习 GPIO驱动相关函数详解
    linux 驱动学习 内核头文件 interrupt.h
    linux 驱动学习 常用头文件 cdev.h
    2020.11.10 1课 c++1 内联函数inline,引用对变量取别名,函数重载,缺省
  • 原文地址:https://www.cnblogs.com/greatkyle/p/6758318.html
Copyright © 2011-2022 走看看