# 1、什么是元类
# 类是对象的模板,对象是类的实例化
# 元类是类的模板,类是元类的实例化
# 所以元类就是类的“类”
#定义元类的目的:
1、控制类的产生
__new__
__init__
2、控制类的调用(产生对象)
__call__
# 内置的元类:type
# class关键字定义的所有类、
# 以及python内置的类都是通过元类type实例化产生的
# 验证
class Test:
def __init__(self, name):
self.name = name
print(type(Test)) # <class 'type'>
print(type(int)) # <class 'type'>
# 2、class机制分析
# class生成类的步骤
# 1、创建类名 class_name = '类名'
# 2、创建类的父类 class_bases = (object,)
# 3、创建类体代码,和类的名称空间的字典(空字典)
# class_dic = {}
# class_body = """
# def __init__(self, name):
# self.name = name
# """
# 通过exec方法可以执行类体代码,并得到类的名称空间的地址存入class_dic
# exec(class_body,{}, class_dic) 其中这个{ }:类体内所引用的全局名称空间
# 4、调用元类生成类
# 类 = type(class_name,class_bases,class_dic)
class_name = 'Foo'
class_bases = (object,)
class_dic = {}
class_body = """
def __init__(self, name):
self.name = name
"""
print(class_dic)
exec(class_body, {}, class_dic)
print(class_dic)
Foo = type(class_name, class_bases, class_dic)
foo = Foo('test')
print(foo.name)
# 输出内容:
# {}
# {'__init__': <function __init__ at 0x000001DC781A7378>}
# test