博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
工作记录 反射
阅读量:5158 次
发布时间:2019-06-13

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

1、反射

反射的存在解决了eval的安全问题,eval是接收外界输入进行执行,而反射是对已有的东西进行转换或者操作相对安全

反射对象中的反射方法  hasattr getattr setattr delattr

getattr 

class A:    price = 0.3    def fun(self):        print('1111')    def fun1(self,age):        print('111{}'.format(age))    @classmethod    def change_price(cls):         cls.price = 0.7a = A()a.name = 'ebola'print(getattr(a,'name'))    #对象调用属性getattr(A,'fun1')(a,'22')   #类调用方法getattr(a,'fun1')('22')  #对象调用方法print(getattr(A,'price')) #查看静态属性getattr(A,'change_price')()  #执行改变的函数  是价格变成了0.7print(getattr(a,'price'))print(getattr(A,'price'))使用场景变量名 = input('请输入查看的属性')print(getattr(a,变量名))  #返回的字符串直接执行就可以
# 夫妻档if hasattr(A,'fun1'):  #先判断有没有这个方法    getattr(A,'fun1')()  #执行这个方法反射模块的方法   模块名.模块名中的函数名字字符串import syssys.path.append(r'C:\Users\zzzzzz\Desktop\python\【Ebola】day - 副本 (27)\y.py')import ygetattr(y,'fun1')()a = y.A()   #调用模块的类a.fun()C1 = getattr(y,'A')()  #调用模块中的类  再加上括号相当于实例化print(C1.price)调用自身模块name = '小明'print(getattr(sys.modules[__name__],'name')) #调用自身模块中的变量a = getattr(sys.modules[__name__],'A')()   #调用自身模块中的类print(getattr(a,'price'))
setattr  设置修改变量(添加)   deltattr  删除一个变量
class A:    passa = A()setattr(A,'name','gaojiantao')  #添加一个静态变量setattr(a,'name','luliu')  #添加一个动态变量print(a.name)delattr(a,'name')   #删除对象a 中的nameprint(a.name)     #name被删除去找 就去类中找print(A.name)
 

 

 

转载于:https://www.cnblogs.com/Ebola-/p/8329465.html

你可能感兴趣的文章
kubernetes_book
查看>>
侧边栏广告和回到顶部
查看>>
https://blog.csdn.net/u012106306/article/details/80760744
查看>>
海上孤独的帆
查看>>
处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“Manag
查看>>
01: socket模块
查看>>
mysql触发器
查看>>
淌淌淌
查看>>
win10每次开机都显示“你的硬件设置已更改,请重启电脑……”的解决办法
查看>>
C++有关 const & 内敛 & 友元&静态成员那些事
查看>>
函数积累
查看>>
Swift 入门之简单语法(六)
查看>>
〖Python〗-- IO多路复用
查看>>
栈(括号匹配)
查看>>
Java学习 · 初识 面向对象深入一
查看>>
源代码如何管理
查看>>
vue怎么将一个组件引入另一个组件?
查看>>
bzoj1040: [ZJOI2008]骑士
查看>>
LeetCode 74. Search a 2D Matrix(搜索二维矩阵)
查看>>
利用SignalR来同步更新Winfrom
查看>>