python高阶 -- 描述器
描述器功能强大,应用广泛,它可以控制我们访问属性、方法的行为,是@property、super、staticmethod、类方法、类属性、实例背后的实现机制,是一种比较底层的设计
描述器定义
描述器是一个具有“绑定的行为”的对象属性,该对象属性访问通过描述器协议覆盖:__get__(),__set__()和__delete__()。若对象中有定义这三个方法中的任何一个,则该对象被称为一个描述器
object.__get__(self, instance, owner)
获取属主类的属性(类属性访问)或者该类的一个实例的属性(实例属性访问),owner始终是属主,instance是属性访问的实例,当属性通过owner访问时则为None,这个方法应该返回(计算后)的属性值,或者引发一个Atrribute异常
object.__set__(self, instance, value)
设置属主类的实例instance的属性为一个新值value
obje.__delete(self, instance)
删除属主类的实例instance的属性
类型
1、描述器类有__get__和 __set__ 2个方法
2、非数据描述符只有一个__get__方法,通常用于函数。非数据描述器的优先级低于实例属性
例子中的t.attr是访问Mode类的属性attr,但实际是访问Filed这个描述器中的__get__方法
若是修改,则会访问__set__方法
ORM模型
O(object):类和对象
R(Relation):关系,关系数据库中的表格
M(Mapping):映射
ORM框架功能:
-- 建立模型类型和表之间的对应关系,允许我们通过面向对象的方式来操作数据库
-- 根据设计的模型类生成数据库中的表格
-- 通过方便的配置就可以进行数据库的切换
数据库的字段类型
-- mysql常用数据类型
-- 整数:int,bit
-- 小数:decimal(decimal表示浮点数,如decimal(5,2)表示共存5位数,小数占2位)
-- 字符串:varchar,char(varchar可变长度,char不可变长度)
-- 日期时间:date,time,datetime
-- 枚举类型(enum)
-- ORM模型中对应的字段(下面Django的ORM模型中选取的几个字段)
类型 描述
BooleanField 布尔字段,值为True或False
CharField(max_length=最大长度) 字符串,参数max_length表示最大字符个数