2、基础知识点回顾
`# 一、Python中的魔法方法
__init__:类实例化时触发
__str__:打印对象时触发
__call__:对象()触发,类也是对象,如果是类(),则是类的实例化过程对用元类的__call__
__new__:在类实例化对象时触发,但时在__init__之前先触发
__del__:del对象在对象回收时触发
__setattr__,__getttr__:(.拦截方法),当对象.属性赋值时,会调用setattr
当对象.属性取值时,会调用getattr
__getitem__,__setitem__:([]拦截),当对象[]属性赋值时,会调用setitem
当对象[]属性取值时,会调用getitem
__enter__和__exit__:上下管理器
二、setattr、getattr、setitem、getitem的演示
在函数的使用中,可以使用setattr、getattr进行使用.属性的方式进行赋值或者取值
使用setitem、getitem进行使用[]实用性的方式进行赋值或者取值
取值的时候需要使用return,将值保存,
使用反射可以进行判断是否正确
class Person:
def __init__(self,name):
self.name = name
def __setitem__(self, key, value):
setattr(self,key,value) #反射
def __getitem__(self, item):
return getattr(self,item) #反射取值
p = Person('a')
p.name = 'ppp'
p['name'] = 10
print(p.name)
print(p['name'])
dic = {'name':'a','age':19}
class Mydic(dict):
def __setattr__(self, key, value):
print('对象加点赋值,会触发我')
self[key]=value
def __getattr__(self, item):
print("对象加点取值会触发我")
return self[item]
mydic = Mydic(name='b',age=1)
print(mydic['name']) #可以使用mydic[]取值,但是无法进行触发
print(mydic.name) 使用内置getattr取值,需要返回一个return
mydic.name=99 使用内置setattr进行赋值
print(mydic.name)
三、上下文管理器
上下管理器即使用,with as 在执行的时候会触发__enter__,而在with结束的时候会触发__exit__,进行自动管理
class Person:
def __enter__(self):
print('进入with管理时触发')
print('进入with语句块时执行')
return 'oo'
def __exit__(self, exc_type, exc_val, exc_tb):
print('退出with时执行')
print('1', exc_type)
print('2', exc_val)
print('3', exc_tb)
with Person() as p:
print(p)
四、eq
当执行==时,切来那边都是对象时就会触发,不是对象无法比较,会直接报错,
第二个对象会传入__eq__中
class A:
def __init__(self,x,y):
self.x = x
self.y = y
def __eq__(self, obj):
print(obj.x) #打印出第二个对象的值
if self.x+self.y == obj.x+obj.y:
return True
else:
return False
a = A(1,2)
b = A(2,1)
print(a==b) 当执行==时,会触发__eq__的执行,并且把b传递到eq中,也就是object,==后只要是对象,就可以传进去
五、cookie、session、token
5.1、相关介绍
HTTP协议:无状态,无连接,给予请求响应,给予tcp/ip,应用于协议层
mysql:c/s架构:底层基于socket,自己封装的协议,
MySQL的客户端:navcate(c++图形化界面,实现了请求和响应)
pymysql(基于Python语言实现了请求和响应)
redis:c/s架构,基于socket,自己封装的协议
docker:c/s架构,基于HTTP协议,使用restfull规范
elasticsearch:c/s架构,基于HTTP协议,使用restfull规范
5.2、名词介绍
cookie:是存在于浏览器的键值对,向服务器发送请求,携带他过去(比较不安全)
session:是存在于服务器的键值对,放置在内存、文件、MySQL、redis中,都可以
缺点是:如果用户量比较大,存储需要消耗大量的服务器资源
token:就是个字符串(即安全,又可以存个人信息),在个人信息的基础上加密字符串,
token的使用现在比较广泛,契合了前后端分离
六、异常处理
try:防止有可能出现异常的代码
except:出现异常时,反馈的信息,并且可以区分不同类型的异常分类
else:显示未出现异常时,需要反馈的信息
finally:无论是否有异常都会直接执行
try:
except :
finally:
else: 什么时候执行
try:
print("xxx")
# print(1/0)
except Exception as e:
print(e)
else: # 基本上不会用到
print("正常执行,没有出异常,会走")
finally:
print("我是finally") # 用于会走,无论是否有异常
七、pymysql的使用
import pymysql
#连接数据库
conn=pymysql.connect(host='101.133.225.166', user='root', password="123456",database='test', port=3306) #
# 获取游标
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor) # 查出来数据是字典格式
# 操作 定义一个sql
# sql='select id,name from book'
# cursor.execute(sql)
# ret=cursor.fetchall()
# print(ret)
# 插入
# sql='insert into book(id,name) values (%s,%s)'
# cursor.execute(sql,[3,'lqz'])
# conn.commit()
# 删除
# sql='delete from book where name=%s'
# cursor.execute(sql,['lqz'])
# conn.commit()
# 更新
# sql='update book set name=%s where id=%s'
# cursor.execute(sql,['xxx',1])
# conn.commit()
`