- 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__ 对象的名称空间