工作记录 反射

Posted 埃博拉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工作记录 反射相关的知识,希望对你有一定的参考价值。

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)

 



以上是关于工作记录 反射的主要内容,如果未能解决你的问题,请参考以下文章

工作记录 反射

为啥我的 Ray March 片段着色器反射纹理查找会减慢我的帧速率?

CSP核心代码片段记录

将 OpenGL 片段着色器设置为仅通过漫反射减少 vec4 色点的 RGB 值,而不是 alpha

反射机制

使用反射在外部JAR / CLASS上调用包含Hibernate事务的方法(Java EE)