码迷,mamicode.com
首页 > 其他好文 > 详细

工作记录 反射

时间:2018-01-22 17:39:36      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:变量   改变   attr   删除对象   app   问题   自身   字符串   一个   

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.7
a = 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.7
print(getattr(a,price))
print(getattr(A,price))
使用场景
变量名 = input(请输入查看的属性)
print(getattr(a,变量名))  #返回的字符串直接执行就可以
# 夫妻档
if hasattr(A,fun1):  #先判断有没有这个方法
    getattr(A,fun1)()  #执行这个方法
反射模块的方法   模块名.模块名中的函数名字字符串
import sys
sys.path.append(rC:\Users\zzzzzz\Desktop\python\【Ebola】day - 副本 (27)\y.py)
import y
getattr(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:
    pass
a = A()
setattr(A,name,gaojiantao)  #添加一个静态变量
setattr(a,name,luliu)  #添加一个动态变量
print(a.name)
delattr(a,name)   #删除对象a 中的name
print(a.name)     #name被删除去找 就去类中找
print(A.name)

 



工作记录 反射

标签:变量   改变   attr   删除对象   app   问题   自身   字符串   一个   

原文地址:https://www.cnblogs.com/Ebola-/p/8329465.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!