zoukankan      html  css  js  c++  java
  • 关于元类的一些使用心得

    作廖老师的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__方法初始化类对象

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

  • 相关阅读:
    网络爬虫之Cookies解决
    高性能异步爬虫
    Python csv存储
    pandas ExcelWriter用法及代码示例
    pandas to_excel 用法详解
    pandas read_csv 与 to_csv 方法各参数详解
    pandas read_excel操作
    pandas DataFrame.groupby()所见的各种用法详解
    Pandas 中 DataFrame 基本函数整理
    Python 解析二维码 输出文本
  • 原文地址:https://www.cnblogs.com/weixia-blog/p/7339833.html
Copyright © 2011-2022 走看看