博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python反射机制
阅读量:6555 次
发布时间:2019-06-24

本文共 1220 字,大约阅读时间需要 4 分钟。

关于反射, 其实一共有4个函数:

其中obj可以是模块或者是对象

  • hasattr(obj, str) 判断obj中是否包含str成员
    def hasattr(*args, **kwargs)
  • getattr(obj,str) 从obj中获取str成员
    def getattr(object, name, default=None): 如果没查找都内容,返回设置的默认值
  • setattr(obj, str, value) 把obj中的str成员设置成value. 注意. 这里的value可以是值, 也可以是函数或者方法
    def setattr(x, y, v):
  • delattr(obj, str) 把obj中的str成员删除掉
    def delattr(x, y):

            注意, 以上操作都是在内存中进行的. 并不会影响你的源代码

在操作的对象是模块的时候:

import gg ## #def dd():    print('这就是我想改的 ')setattr(gg,'g4',dd)#将原来的函数修改为自动以的函数dd 》》类似于修改字典中的vauleprint(gg.g4())#调用的时候还是使用原来的方式进行调用setattr(gg,'name','我的天啊')#同理这是对模块中的变量的修改print(gg.name)delattr(gg,'name') #同理这是对模块中的变量的删除   print(gg.name)#都不影响源码,都是修改内存上的内容,

在对象中应用的时候用法基本相同,注意的是  创建的对象的属性都会存放在创建对象的开辟的内存位置,所有的方法会放在类的代码区,使用反射的时候对应进行使用就可以

class Car:    def __init__(self,color):        self.color = color    def fly(self):        print('我的车真的会飞')gg = Car('黄色')if hasattr(gg,'color'):#通过hasattr判断熟悉你是否存在    print(getattr(gg,'color')) #通过getattr获取属性的值if not hasattr(Car,'run'):#当不存在某个方法的时候,可以通过setattr去新建(setattr:存在就是修改,不存在就自动新建)    setattr(Car,'run',lambda self,x:print('我的车还会跑%s'%x))    gg.run('啊')if  hasattr(Car,'fly'):    delattr(Car,'fly')if not  hasattr(Car,'fly'):    print('fly 方法已经成功删除')

 

转载于:https://www.cnblogs.com/vivi0403/p/9936465.html

你可能感兴趣的文章
spring中InitializingBean接口使用理解(转)
查看>>
基于php5.5使用PHPMailer-5.2发送邮件
查看>>
android java.lang.SecurityException: Permission Denial: not allowed to send broadcast
查看>>
InstallShield 2012 Spring新功能试用(16): Suite/Advanced UI 或 Advanced UI安装程序能在安装时进行输入合法性校验与反馈...
查看>>
【转】正则表达式高级讲解
查看>>
C#面试宝典
查看>>
三种排序算法python源码——冒泡排序、插入排序、选择排序
查看>>
基金项目的英文
查看>>
.NET平台下使用MongoDB入门教程
查看>>
《软件性能测试与LoadRunner实战教程》喜马拉雅有声图书上线
查看>>
R语言可视化学习笔记之ggpubr包—SCI文章图
查看>>
【linux+C】通过几个实例温习指针
查看>>
HDU 1015 Safecracker 解决问题的方法
查看>>
【Echarts每天一例】-1
查看>>
ios 字典转模型
查看>>
正在编译转换: 未能找到元数据文件 EntityFramework.dll
查看>>
Java类集
查看>>
K-Means聚类算法的原理及实现【转】
查看>>
类的生命周期
查看>>
php apache用户写文件夹权限设置
查看>>