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清空命令行方式

python清空命令行 ! 有时我们在命令行上运行一些代码时,觉得有些冗余了,可以通过以下代码进行清除命令行上的代码。 import os def clear():os.system...

Python json 错误xx is not JSON serializable解决办法

Python json 错误xx is not JSON serializable解决办法 在使用json的时候经常会遇到xxx  is not JSON serializab...

matplotlib subplots 设置总图的标题方法

如下所示: matplotlib subplots 设置总图的标题 : fig.suptitle(dname,fontsize=16,x=0.53,y=1.05,) 以上这篇matplo...

python脚本后台执行方式

在Linux中,可以使用nohup将脚本放置后台运行,如下: nohup python myscript.py params1 > nohup.out 2>&1 &...

Python 时间处理datetime实例

关于datetime也是简单介绍。因为有很多东西需要自己去使用,去查帮助才最有效。例子:计算上一个星期五并输出。解答:import datetime, calendar ...