yamx

元类及class机制分析

# 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


评论

© yamx | Powered by LOFTER