exec 元类 ORM

exec内置方法

# 全局名称空间
# # 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(global_dict)

print(local_dict)

元类

在python中一切皆对象

创建类的两种方式:

  1. 通过class关键字创建类,内部会自动调用type(),type帮我们创建一个自定义类。
  2. 通过手动调用type()实列化得到自定义的类

什么是元类

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

元类的作用

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

怎么定义创建的元类:

  1. 自定义一个元类,继承type,派生出自己的属性与方法
  2. 给需要使用的类,通过metaclass指定自定义好的元类。

自定义元类

class Mymetaclass(type):
    def __init__(self,class_name,class_base,class_attr)
    	if not class_name.istitle()
        	raise TypeError('类首字母必须大写')
            
        if not class_attr.get(__doc__)
        	raise TypeError
        super().__init__(class_name,class_base,class_attr)
        
            # 模拟type元类内部做的事情
    # 元类触发的__call__可以控制类的调用。调用__call__会触发以下两点
    def __call__(self, *args, **kwargs):
        # 1.会调用__new__()--> obj, 会创建一个空对象。
        obj = object.__new__(self)
        # 2.会执行__init__(obj, *args, **kwargs),
        obj.__init__(*args, **kwargs)
        return obj

    # 可以通过元类内部的__new__控制对象的创建
    def __new__(cls, *args, **kwargs):
        pass

ORM

对象关系----》映射到数据库Mysql中的数据表

类名 ---> 表名
对象 ---> 一条记录
对象.属性 ---> 字段

模拟Django的ORM,为了,将数据库的 增、删、改、查,全部封装成
一个个的方式,比如: save, delete, update, select。

posted @ 2019-11-04 21:57  鸿鸿1  阅读(136)  评论(0编辑  收藏  举报