zoukankan      html  css  js  c++  java
  • 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'

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

    • 相关阅读:
      【LSGDOJ 1408】邮局
      中间件小姐姐直播“带货”——阿里程序员必知的插件
      ChaosBlade 发布对 C++ 应用混沌实验的支持
      来自 Spring Cloud 官方的消息,Spring Cloud Alibaba 即将毕业
      大合集 | 9 场 Dubbo Meetup 回顾视频和PPT下载
      Future Maker | 领跑亚太 进击的阿里云数据库
      更简单易用的数据仓库,阿里云重磅推出分析型数据库3.0版
      AnalyticDB for MySQL 3.0 技术架构解析
      阿里云 EMAS HTTPDNS 联合函数计算重磅推出 SDNS 服务,三大能力获得突破
      新一代互联网传输协议QUIC浅析
    • 原文地址:https://www.cnblogs.com/gfhh/p/11794572.html
    Copyright © 2011-2022 走看看