• 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'

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

    • 相关阅读:
      Linux目录树与磁盘分区
      私有服务器外网访问zerotier解决方案
      ubuntu防火墙相关
      “ssh协议”简单使用
      Ubuntu软件安装小记
      怎么说服领导,能让我用DDD架构肝项目?
      金3银4面试前,把自己弄成卷王!
      开发 IDEA Plugin 引入探针,基于字节码插桩获取执行SQL
      《重学Java设计模式》作者开始录视频了!
      《Mybatis 手撸专栏》第1章:开篇介绍,我要带你撸 Mybatis 啦!
    • 原文地址:https://www.cnblogs.com/gfhh/p/11794572.html
    Copyright © 2020-2023  润新知