zoukankan      html  css  js  c++  java
  • 博客整理day38

    python day 38 元类

    一 exec模块

    exec是python内置模块

    它可以把'字符串形式'的python代码,添加到全局空间或者局部空间中

    # 参数1: 字符串形式的python代码
    # 参数2: 全局名称空间字典
    # 参数3: 局部名称空间字典
    
    # 全局名称空间
    # # 1.文本形式的python代码
    code = '''
    global x
    x = 10
    y = 20
    '''
    
    # 2.全局的名称空间 {}
    global_dict = {'x': 200}
    
    # 3.局部名称空间 {}
    local_dict = {}
    
    exec(code, global_dict, local_dict)
    print(global_dict)
    
    --------------------------------------------------------------
    # 局部名称空间
    # 1.文本形式的python代码
    code = '''
    x = 100
    y = 200
    def func():
        pass
    '''
    
    # 2.全局的名称空间 {}
    global_dict = {}
    
    # 3.局部名称空间 {}
    local_dict = {}
    
    exec(code, global_dict, local_dict)
    print(local_dict)
    

    二 元类

    什么是元类

    元类是类的类

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

    元类的作用

    元类可以控制类的产生过程,类的产生过程其实就是元类的调用过程

    作用:

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

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

    自定义创建元类

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

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

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

    #自定义元类
    class MyMeta(type):
        def __init__(self,class_name,class_base,class_dict):
            if not class_name.istitle():
                raise TypeError('类的首字母要大写')
                
            #控制类中必须要有注释
            if not class_dict.get('__doc__'):
                raise TypeError('类内部必须注释')
                
            super().__init__(class_name,class_base,class_dict)
              
         def __call__(self,*args,**kwargs):
            #调用__new__() --> 创建一个空对象
            obj = object.__new__(self)
        	#会执行__init__(obj,*args,**kwargs)
            obj.__init__(*args,**kwargs)
            return obj
        
    class Foo(object,metaclass=MyMeta):
        x =10
        def __init__(self,z,y):
            self.z = z
            self.y = y
            
    foo = Foo(1,2)
    

    三 ORM(对象映射关系程序)

    ​ 通过orm将编程语言的对象模型和数据库的关系模型建立映射关系,在使用编程语言对数据库进行操作的时候,可以直接使用编程语言的对象模型进行操作

    优点:

    1. 使与数据库交互变得简单易行
    2. 构造固化数据结构变得简单易行
  • 相关阅读:
    css定位
    Register Form
    自我介绍
    靠,用 mod_proxy_ajp 代替 mod_jk 不知简单多少倍
    Mac 切换 32 和 64
    JAVA面向对象(8)
    JAVA面向对象(7)
    JAVA面向对象(6)
    JAVA面向对象(5)
    JAVA面向对象(4)
  • 原文地址:https://www.cnblogs.com/samoo/p/11794916.html
Copyright © 2011-2022 走看看