day38

目录

    exec模块

    什么是exec?

    是python的一个内置模块

    它的作用?

    '''
    
    x = 10
    
    def func1():
    
    	pass
    
    '''
    

    怎么用:

    参数1:字符串形式的python代码

    参数2:全局名称空间字典

    参数3:局部名称空间字典

    调用exec()

    元类

    什么是元类?

    元类就是类的类,Chinese类的类是type,type是所有类的类,type就是一个元类

    元类的作用?

    元类可以帮我们控制类的创建

    元类可以帮我们控制类的调用

    怎么自定义创建元类?

    自定义一个元类,继承type,派生出自己的属性与方法

    给需要使用的类,通过metaclass指定自定义好的元类

    ​ -class Chinese(metaclass='自定义的元类'):

    创建类的两种方式:

    通过class关键字创建类,内部会自动调用type(),type帮我们创建一个自定义类

    通过手动调用type()实例化得到自定义的类

    ORM:对象关系映射——>映射到数据库MYSQL中的数据表

    类名——>表名

    对象——>一条记录

    对象.属性——>字段

    模拟Django的ORM,为了,将数据库的增删改查,全部封装成一个个的方式,比如,save,delete,updata,select

    元类需要处理的问题:

    给数据表类,强制必须要有一个主键

    主键必须是唯一的

    将数据表中,所有的字段对象,都存放在一个独立的字典中,存不是目的,目的是为了取值方便

    问题:解决代码冗余问题,比如有100张表,需要些100次__init__

    解决:继承一个父类,父类中定义一个——init__init__

    问题:无法预测每一张表中的字段是什么,无法通过父类的__init__解决问题

    解决:通过继承字典,内部的__init__,可以接受‘任意个数’的‘关键字参数’

    问题:继承字典的类实例化的对象,无法通过“对象.属性”的方式存值

    解决:通过__setattr____getattr__来实现,让字典对象与普通对象一模一样,并且具备字典原有的特性

    ORM.py文件文字概述:

    先创建字典的类型,对应数据表中的一个个字段的创建规范

    先创建一个父类,两个子类,继承父类的方法,

    定义一个元类,继承type,函数中创建一个空的对象空间,里面放类名,也就是表名,基类/父类也就是对应的记录,类的名称空间,也就是表中的字段

    过滤Models类,Models类中什么都不做,将类原路返回

    一张表必须有表名,假如table_name没有值,则将类名当做表名

    主键名提前设置为None,

    mappings设置为一个空字典

    循环名称空间中所有的属性,除了有用字典,还有其他字段意外额度属性

    过滤字段对象以外的内容

    判断字段对象primary_key是否为true

    再判断主键是否已存在,如果存在抛出错误,只能有一个主键

    若不存在,则给primary_key赋值

    循环key值是否在mappings中,因为mappings与元类中的属性重复,为了节省内存,剔除重复的属性

    如果上面都没有主键,最后判断是否有主键,如果没有,必须有一个主键

    给类的名称空间添加表名,主键名,添加一个mappings字典,字典中拥有所有字段属性

    然后返回类名,父类,类名称空间

    在Modles类中继承dict,metaclass是指定的自定义创建的元类

    定义函数来判断打印调用没有属性时会触发,将字典的值返回,

    打印key,value,设置key,value值

    定义子类User和Movie类,都继承Models类

    它们的字段user_id都是IntegerFeild类型的字段,字段名等于name='user_id',primary_key=True

    它们的user_name,pwd都是StringFild类型的字段,name='name',name='pwd'

    主函数下打印表名称空间里面的内容,一条条字段,也就是表的内容

    原文地址:https://www.cnblogs.com/gfhh/p/11794572.html