Python中type的构造函数参数含义说明

yipeiwu_com6年前Python基础

测试代码如下:

复制代码 代码如下:

 class ModelMetaClass(type):
     def __new__(cls,name,base,attrs):
         logging.info("cls is:"+str(cls))
         logging.info("name is:"+str(name))
         logging.info("base is:"+str(base))
         logging.info("attrs is:"+str(attrs))
         return type.__new__(cls,name,base,attrs)
         pass
     pass
 
 class Model(dict):
     __metaclass__ = ModelMetaClass
     def __init__(self):
         pass
     pass
 
 def main():
     m=Model()
 
 if __name__ == '__main__':
     main()

测试结果:
复制代码 代码如下:

 INFO:root:cls is:<class '__main__.ModelMetaClass'>
 INFO:root:name is:Model
 INFO:root:base is:(<type 'dict'>,)
 INFO:root:attrs is:{'__module__': '__main__', '__metaclass__': <class '__main__.ModelMetaClass'>, '__init__': <function __init__ at 0x025C76F0>}

结论就显而易见了。cls是当前类的名字,即类本身。name是通过__metaclass__属性指向ModelMetaClass的类,即要实例化的类,ModelMetaClass拦截了该类的实例化。base是要实例化的类的基类。attrs是要实例化的类的属性集合。

相关文章

python机器学习之随机森林(七)

机器学习之随机森林,供大家参考,具体内容如下 1、Bootstraping(自助法)        名字来自成语“pull...

老生常谈Python基础之字符编码

老生常谈Python基础之字符编码

前言 字符编码非常容易出问题,我们要牢记几句话: 1.用什么编码保存的,就要用什么编码打开 2.程序的执行,是先将文件读入内存中 3.unicode是父编码,只能encode解码成其他编...

为Python的web框架编写前端模版的教程

为Python的web框架编写前端模版的教程

虽然我们跑通了一个最简单的MVC,但是页面效果肯定不会让人满意。 对于复杂的HTML前端页面来说,我们需要一套基础的CSS框架来完成页面布局和基本样式。另外,jQuery作为操作DOM的...

学习Python3 Dlib19.7进行人脸面部识别

学习Python3 Dlib19.7进行人脸面部识别

0.引言 自己在下载dlib官网给的example代码时,一开始不知道怎么使用,在一番摸索之后弄明白怎么使用了; 现分享下 face_detector.py 和&n...

全面了解Python环境配置及项目建立

全面了解Python环境配置及项目建立

一、安装Python Python比较稳定的两个版本是Python 3.5和Python 2.7,我用的是Python 2.7,下载地址是:https://www.python.org/...