zoukankan      html  css  js  c++  java
  • 元类

    exec() : --python 内置模块
    ---将字符串形式的代码,添加到全局空间或局部空间中

    名称空间内以字典的形式存,取数据

    exec(code, global_dict, local_dict) 
    
    code = '''
    global  x  : 定义全局变量
    x = 199
    y = 432
    def f1():
    	pass
    	-->code :局部名称空间
    '''
    local_dict = {}  # 局部名称空间
    global_dict = {} # 全局名称空间
    

    ORM :

    对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。

    优点:

    隐藏了数据访问细节,“封闭”的通用数据库交互,ORM的核心。他使得我们的通用数据库交互变得简单易行,并且完全不用考虑该死的SQL语句。快速开发

    ORM使我们构造固化数据结构变得简单易行。

    缺点:

    无可避免的,自动化意味着映射和关联管理,代价是牺牲性能

    面向对象的查询语言(X-QL)作为一种数据库与对象之间的过渡,虽然隐藏了数据层面的业务抽象,但并不能完全的屏蔽掉数据库层的设计,并且无疑将增加学习成本.

    对于复杂查询,ORM仍然力不从心。

    元类 : ----python 中一切皆对象 !!

    什么是元类 :

     -  所有类的类 --》 type(内置的元类) 
     -  元类(type) --实列化 --》 类teacher  ---实列化 --》 对象
    

    元类的作用 : 可以控制 类的产生过程 --》元类的调用过程

    创建类的方式:

    方法一 ; class + 类名

    class + 类 : --》 类 -对象 (产生该对象的类--》元类)

    Object <-相互调用--> type

    teacher() = type(参数...)
    参数1 class_name  = 类名 teacher
    参数2 class_bases = 基类 (object)
    参数3  class_dic = 类的名称空间
    调用元类得到类 
    
    

    方法二:

    继承type() --自定义元类,在使用metaclass关键字参数为一个类指定元类

    calss Mymeta(type):
        pass
    class Stand(object,metaclass=Mymeta):
        school = 'stank'
        def __init__(self,name,age):
            self.name = name
            self.age = age
    	def say(self):
            print(save welecome to the stank to learn python)
    

    创建元类(meta class):

    1.自定义一个类,继承type,并排生性的属性和方法

    2.给需要使用的类,通过metaclass指定自定义好的元类。 - class Chinese(metaclass='自定义的元类'):

    type(类名,父类,类的名称空间)

    #魔法方法 :
    __call__ :   --模板
        1. 调用__new__产生一个空对象
        
        2. 调用__init__初始化空对象obj
        
        3. 返回初始化后的对象obj
    class Mymeta(type):  # 继承type 的类 --》 元类 
        def __call__(self,*args,**kwargs):
            
            obj = self.__new__(self)
            return obj
    
    class Teacher(object,metacalss=Mymeta):
        school = 'stand'
    	def __init__(self,name,age):
            self.name = name
            self.age = age
        def say(self):
            print('says welecome to learn python ')
            
            
    t1 = Teacher('lisa',18)
    print(t1.__dict__)  # __dict__  对象的名称空间
    
  • 相关阅读:
    生活的真谛
    WSDL文件简介(附例子)
    关于智慧
    叔叔的去世
    google labs
    项目需求工具
    agent/angel/angle
    关于地图投影的C程序的一些说明
    Ubuntu下开启Apache重写扩展
    PHP内置函数之ctype_alnum() 函数检查字符串是否由字符和数字组成
  • 原文地址:https://www.cnblogs.com/shaozheng/p/11794033.html
Copyright © 2011-2022 走看看