Python—元类,,什么是元类?元类是类
Python—元类,,什么是元类?元类是类
什么是元类?
元类是类的类,是类的模板
元类是用来控制如何创建类的,正如类是创建对象的模板一样,而元类的主要目的是为了控制类的创建行为
元类的实例化的结果为我们用class定义的类,正如类的实例为对象(f1对象是Foo类的一个实例,Foo类是 type 类的一个实例)
type是python的一个内建元类,用来直接控制生成类,python中任何class定义的类其实都是type类实例化的对象
方式一:使用class关键字
class Chinese(object): country=‘China‘ def __init__(self,name,age): self.name=name self.age=age def talk(self): print(‘%s is talking‘ %self.name)
方式二:就是手动模拟class创建类的过程):将创建类的步骤拆分开,手动去创建
#准备工作:#创建类主要分为三部分 1 类名 2 类的父类 3 类体#类名class_name=‘Chinese‘#类的父类class_bases=(object,)#类体class_body="""country=‘China‘def __init__(self,name,age): self.name=name self.age=agedef talk(self): print(‘%s is talking‘ %self.name)"""
步骤一(先处理类体->名称空间):类体定义的名字都会存放于类的名称空间中(一个局部的名称空间),我们可以事先定义一个空字典,然后用exec去执行类体的代码(exec产生名称空间的过程与真正的class过程类似,只是后者会将__开头的属性变形),生成类的局部名称空间,即填充字典
class_dic={}exec(class_body,globals(),class_dic)
步骤二:调用元类type(也可以自定义)来产生类Chinense
Foo=type(class_name,class_bases,class_dic) #实例化type得到对象Foo,即我们用class定义的类Fooprint(Foo)print(type(Foo))print(isinstance(Foo,type))‘‘‘<class ‘__main__.Chinese‘><class ‘type‘>True‘‘‘
我们看到,type 接收三个参数:
第 1 个参数是字符串 ‘Foo’,表示类名第 2 个参数是元组 (object, ),表示所有的父类第 3 个参数是字典,这里是一个空字典,表示没有定义属性和方法补充:若Foo类有继承,即class Foo(Bar):.... 则等同于type(‘Foo‘,(Bar,),{})
Python—元类
相关内容
- Python—语句,,####python
- python——pickle模块的详解,pythonpickle详解,pickle模块详解
- Python实现Zabbix图文告警,,python实现Za
- 解决Python查询Mysql数据库信息乱码问题,pythonmysql,今天
- python学习-2 python安装和环境变量的设置,,python的下载
- python对目录下的文件进行 多条件排序,,在进入正题之
- Python之urllib库详解,pythonurllib详解,urllib 是 P
- Django框架模板的使用方法示例,django框架示例
- 我的第二十一篇博客---Mysql强化及应用于python,第二十
- Python单例模式的实现方式,python例模式,一.单例类单例
评论关闭