• 关于元类的一些使用心得


    作廖老师的Python实战作业时,对元类这个魔法方法有些小心得。

    元类这个黑魔法和linux中root都是bug般的存在,不想纠缠概念性东西,试着从Python解释器的角度分析下元类的执行过程。

    其实,元类的主要作用尽在这三句话中:

    1.拦截类的创建

    2.修改类

    3.返回修改后的类

    普通类调用__new__方法产生实例对象,而元类通过type.__new__创建新的类。

    1 class ModelMetaclass(type):
    2     #采集应用元类的子类属性信息
    3     #将采集的信息作为参数传入__new__方法
    4     #应用__new__方法修改类
    5 def __new__(cls,name,bases,attrs):
    6      ...
    7      return type.__new__(cls,name,bases,attrs)
    1 class Model(dict,metaclass=ModelMetaclass):
    2      ...

    我们定义一个元类ModelMetaclass和一个应用元类的Model类。

    1 model = Model(**kw)

    当我们用Model类创建一个model实例对象,python解释器执行过程如下:

    1.发现元类

    2.应用元类。通过元类的__new__创建类对象,__new__方法首先从Model类的类定义中搜集属性和方法信息作为字典数据传入__new__的attrs参数中;用户对收集的信息删减增添修改,生成新的attrs参数;调用type.__new__方法,并把新的attrs参数传入该方法中,即返回一个新的类对象。

    3.如果存在__init__方法,在第二步即生成类对象后调用__init__方法初始化类对象

    当元类存在时,并不是直接根据类的描述创建实例对象,而是拦截类的实例化。然后根据元类动态修改类的描述,最后根据修改后的类描述来创建对象。

  • 相关阅读:
    svn使用
    navicat 15 安装破解
    thinkpad交换Fn和Ctrl
    emqx_mqtt安装+mqtt管理工具
    Adobe XD使用
    FolderPainter:windows系统为文件夹设置不同颜色
    rest client 代替postman
    使用bfg快速清理git历史大文件
    Adobe Acrobat XI Pro v11.0.10中文版
    Excel 2016打开文档时提示“操作系统当前的配置不能运行此应用程序”
  • 原文地址:https://www.cnblogs.com/weixia-blog/p/7339833.html
Copyright © 2020-2023  润新知