猴子补丁;python中反射;http和https区别

发布时间 2023-08-04 16:21:52作者: 雀雀飞了

猴子补丁;python中反射;http和https区别

什么是猴子补丁,有什么用途

- 猴子补丁(Monkey Patching)是一种在运行时动态地修改或扩展已有代码的技术。是在不修改源代码的情况下,改变代码的执行方式或增加功能。

- Python的类是可变的(mutable),方法(methods)只是类的属性(attributes);这允许我们在运行时(run time)修改其行为。这被称为猴子补丁(Monkey Patching),它指的就是偷偷地更改代码。


# 哪里用过
# 1 位置
	import pymysql
	pymysql.instal_as_mysqldb()  # 动态的替换 原来使用 mysqldb链接数据库的类 conn
    
# 2 位置
    gevent.monkey.patch_all() # 动态的替换 原来阻塞的io方法,全都替换成自己写的,不阻塞的 time,socket...
  
# 3 这种情况  ---》json ---》内置模板---》没关注性能高低
    如果有性能高的json转换模块---》想替换---》如果都换,每个地方都要改,太麻烦了
    借助于猴子补丁---》程序运行一开始,动态的把json替换成ujson
        json.loads()

什么是反射,python中如何使用反射

在python中,反射指的是'程序在运行过程中通过字符串来操作对象的属性和方法'
涉及到四个内置函数的使用
stu = Student('kevin')

1. getattr(obj,name,default=None)
res=getattr(stu, 'name')  # kevin 如果第二个参数是属性的话,直接返回属性的值
res=getattr(stu, 'name1') # 当获取的属性不存在的时候,会报错
res=getattr(stu, 'name1', 666) # 如果给了第三个参数,当属性不存在的时候,第三个参数就是默认值
res = getattr(stu, 'func') # 如果是方法名,得到的结果就是方法的内存地址,要想执行,就要结果加括号
print(res) # 内存地址
res() # from Student.func

2. setattr(x,y,v) # x.y = v
setattr(stu, 'x', '123')  # 给对象增加属性, 属性名不存在的时候,增加属性
setattr(stu, 'name', '123')  # 给对象增加属性,属性名存在的时候,修改属性
print(stu.__dict__) #{'x':'123','name':'123'}

3. delattr(x,y) #del x.y 删除对象的属性
delattr(stu, 'name')
print(stu.__dict__) #{}

4. hasattr(*args,**kwargs)
res=hasattr(stu, 'name1') # 对象里是否有该属性或方法
print(res) # False or True

# 可使用反射的地方:
1、反射类中的变量 : 静态属性,类方法,静态方法
2、反射对象中的变量、对象属性、普通方法
3、反射模块中的变量
4、反射本文件中的变量

http和https的区别

HTTP协议,英文全称是Hyper Text Transfer Protocol,是超文本传输协议
	-默认端口80
  -是明文传输,主要存在三大风险:窃听风险、篡改风险、冒充风险
HTTPS协议,英文全称Hyper Text Transfer Protocol over SecureSocket Layer,超文本传输安全协议
	-默认端口443
  -HTTPS在 HTTP与 TCP 之间加入了一个加密/身份验证层,即SSL/TLS,提供了身份验证与加密通讯,可防止数据在传输过程中被窃取、改变,确保数据的完整性
  -HTTPS连接始于非对称加密以进行安全的密钥交换,一旦建立了对称加密密钥,会话期间的大部分数据传输都使用对称加密进行加密。这种组合确保了客户端和服务器之间的安全和高效通信.