博客整理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. 构造固化数据结构变得简单易行
posted @ 2019-11-04 21:11  simple123  阅读(118)  评论(0编辑  收藏  举报