元类

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__  对象的名称空间
posted @ 2019-11-04 19:02  black__star  阅读(158)  评论(0编辑  收藏  举报