第十三章、元类(metaclass)

一、什么是元类

  • 在python中一切皆对象,那么我们用class关键字定义的类本身也是一个对象,负责产生该对象的类称之为元类,即元类可以简称为类的类

    class Foo:  # Foo=元类()
    pass

二、为什么用元类

  • 元类是负责产生类的,所以我们学习元类或者自定义元类的目的:是为了控制类的产生过程,还可以控制对象的产生过程

  • 本质:

  • exec()

    l={}
    exec('''
    school='oldboy'
    def __init__(self,name):
    self.name=name
    def score(self):
    print('分数是100')
    ''',{},l)
    def __init__(self,name):
    self.name=name Person=type('Person',(object,),{'school':'oldboy','__init__':__init__})
    #class 底层就是调用type来实例化产生类(对象)

  • 补充#exec() eval()的区别

  • f = "3+6+9+8"
    s = eval(f)
    print(s)
    --------------------------
    26
  • code = '''
    def func():
    print('test')
    return 555
    func()
    ''' f = exec(code)
    print('---'*5)
    print(f)
    -------------------------------
    test
    ---------------
    None

最新文章

  1. js正则表达式校验非正整数:^((-\d+)|(0+))$
  2. 基于AWS的云服务架构最佳实践
  3. XE系列资源文件的奇怪问题
  4. git server服务器搭建
  5. iOS constraint被应用于view上的时间
  6. Java面向对象深度
  7. iOS之UIImagePickerController的应用
  8. 宏HASH_GET_FIRST
  9. C#对象赋值出现的诡异问题,或许你也遇到过,有待你的解决
  10. CentOS下安装两个或多个Tomcat7
  11. Linux学习笔记——如何使用共享库交叉编译
  12. spring.NET的依赖注入
  13. 365DirMon(文件夹监视专家) v2.8绿色免费版
  14. 基于jQuery表单快速录入数据功能
  15. Oracle官方文档学习路线图
  16. vue+原生JavaScript实现slideDown与slideUp[简单思路]
  17. SkylineGlobe 7.0.1 & 7.0.2版本Web开发 如何实现土方量计算
  18. pandas常用函数之shift
  19. POJ-1679 The Unique MST (判断最小生成树的唯一性)
  20. MySQL内连接,左(外)连接,右(外)连接

热门文章

  1. IE下 CSS hover iframe失效
  2. C++之ListNode
  3. 搭建Kubernetes容器集群管理系统
  4. Cetos 7 命令行登陆与图形界面登陆相互切换
  5. TextInput组件的常用属性
  6. nginx配置静态资源关闭访问日志
  7. JS GZIP压缩
  8. LCTF (easy-100)
  9. django 之(一) --- DjangoRestFormwork
  10. fdisk中参数配置说明表