什么是元类(metaclass)?

元类是类的类,是类的模板

元类的实例为类,正如类的实例为对象

class Foo:

pass

t1=Foo() #t1是通过Foo类实例化的对象

print(type(f1))

print(type(Foo))

所有的对象都是实例化或者说调用类而得到的(调用类的过程称为类的实例化),比如对象t1是调用FOO类得到的一个实例。

如果一切皆为对象,那么类Foo本质也是一个对象,既然所有的对象都是调用类得到的,那么Foo必然也是调用了一个类得到的,这个类称为元类。

一般来说,元类均被命名后缀为Metalass。想象一下,我们需要一个可以自动打招呼的元类,它里面的类方法呢,有时需要say_Hello,有时需要say_Hi,有时又需要say_Sayolala,有时需要say_Nihao。

如果每个内置的say_xxx都需要在类里面声明一次,那将是多么可怕的苦役! 不如使用元类来解决问题。

以下是创建一个专门“打招呼”用的元类代码:

Python

class SayMetaClass(type):

def __new__(cls, name, bases, attrs):

attrs['say_'+name] = lambda self,value,saying=name: print(saying+','+value+'!')

return type.__new__(cls, name, bases, attrs)

class SayMetaClass(type):

def __new__(cls, name, bases, attrs):

attrs['say_'+name] = lambda self,value,saying=name: print(saying+','+value+'!')

return type.__new__(cls, name, bases, attrs)

记住两点:

1、元类是由“type”衍生而出,所以父类需要传入type。【道生一,所以一必须包含道】

2、元类的操作都在 __new__中完成,它的第一个参数是将创建的类,之后的参数即是三大永恒命题:我是谁,我从哪里来,我将到哪里去。 它返回的对象也是三大永恒命题,接下来,这三个参数将一直陪伴我们。

“我们相信人人都可以成为一个IT大神,现在开始,选择一条阳光大道,助你入门,学习的路上不再迷茫。这里是北京尚学堂,初学者转行到IT行业的聚集地。"

如果有什么问题也可以关注IT百战程序员(baizhanchengxuyuan)

python之父北京尚学堂怎么样_尚学堂百战程序员:Python的元类相关推荐

  1. python之父北京尚学堂_尚学堂86---115Python_Note

    第3章序列 序列是一种数据存储方式.用来存储一系列的数据.在内存中,序列就是一块用来存放 多个值的连续的内存空间.比如一个整数序列[10,20,30.40],可以这样示意表示: 10 20    30 ...

  2. python三维建模和cad比较_maya三维动画师和程序员(python)哪个前景好一些?

    哪个前景好我先不说,我先告诉你哪个发量更多: 三维动画师更多. 我自己是做3D行业的,我也有程序员朋友. 从目前的市场需求来看,程序员的下限较低,可能学半年出去找工作直接都可以找到月薪过万的岗位:(不 ...

  3. python之父北京尚学堂_北京尚学堂 - 主页

    ${content} 你输入的邮件地址曾经通过${type}激活了本站帐号,请使用${type}帐号直接登录. 课程习题 : 提示 请选择一个答案 提交 查看正确答案 下一题 ${option}: $ ...

  4. 百战程序员python资源_【百战程序员】Python 文件I/O

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 打开和关闭文件 现在,您已经可以向标准输入和输出进行读写.现在,来看看怎么读写实际的数据文件. Python 提供了必要的函数和方法进行默认情况下的文件基 ...

  5. 程序布置到服务器上速度慢_百战程序员python面试题总结---高级语法(4)

    4.1 简述 TCP 和 UDP 的区别以及优缺点? UDP 是面向无连接的通讯协议,UDP 数据包括目的端口号和源端口号信息. 优点:UDP 速度快.操作简单.要求系统资源较少,由于通讯不需要连接, ...

  6. cuda默认函数与c++冲突_好程序员Python教程系列-第8讲:函数和模块

    好程序员Python教程系列-第8讲:函数和模块,在讲解本章节的内容之前,我们先来研究一道数学题,请说出下面的方程有多少组正整数解. 事实上,上面的问题等同于将8个苹果分成四组每组至少一个苹果有多少种 ...

  7. unicode 编码转换漏洞_好程序员Python教程之字符串编码知识小结

    好程序员Python教程之字符串编码知识小结,提及Python字符串,你会想到什么?是ASCII,还是Unicode?他们之间是如何转换的?字符串编码和字符串有什么区别?接下来好程序员Python教程 ...

  8. python编码转换语句_好程序员Python教程之字符串编码知识小结

    好程序员Python教程之字符串编码知识小结,提及Python字符串,你会想到什么?是ASCII,还是Unicode?他们之间是如何转换的?字符串编码和字符串有什么区别?接下来好程序员Python教程 ...

  9. vue函数如何调用其他函数?_好程序员Python教程系列之递归函数与匿名函数调用...

    好程序员Python教程系列递归函数与匿名函数调用,函数是Python技术学习中重要的一个环节,深入掌握该阶段的知识内容,对于Python技术能力的提升非常有帮助,这里就针对递归函数与匿名函数两种函数 ...

  10. cat命令详解_好程序员Python培训之详解eval好与坏

    好程序员Python培训之详解eval好与坏,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面我们一起来看一下吧. eval是Python的一个内置函数,这个函数的作用 ...

最新文章

  1. Facebook开源多款AI工具,支持游戏、翻译等
  2. 某华为程序员爆料:主动离职,公司竟也给n+1,到手15万,华为真良心!
  3. 抱歉,我觉得有些人做副业并不靠谱
  4. omnet++ : could not be resolved 或error: coreexception 的解决
  5. 使用ElasticSearch,Kibana,ASP.NET Core和Docker可视化数据
  6. phoneGap2.9+eclipse开发环境和helloword案例
  7. redis rdb aof区别_Redis(三):持久化RDB,fork.copyonwrite,AOF,RDBamp;AOF混合使用
  8. matlab数字图像处理函数,MATLAB数字图像处理学习(二)|常用函数
  9. OPPO K9 Pro将于9月26日登场:搭载天玑1200旗舰游戏芯
  10. Asp.Net服务器控件添加OnClientClick属性绑定
  11. JAVA类计算机专业毕业设计题目
  12. Android快速开发之appBase——实战《购物车》
  13. linux文件误删恢复debugfs和extundelete
  14. Esp8266(NodeMCU)物联网芯片的基本简介
  15. 零预算引爆个人和企业品牌
  16. 亚马逊发布“不可变”量子账本数据库产品
  17. three.js 构建简单的房间
  18. 2021 春季新品发布会上,苹果推出了全新配件 AirTag
  19. linux gmac10下载,ethmac10g verilog代码 10G eth mac verilog代码参考下载 - 下载 - 搜珍网...
  20. 前端LayUI框架快速上手详解(一)

热门文章

  1. Electron实现桌面日历
  2. 这可能不只是一篇面经(BAT面试)
  3. 国军标GJB 151B-2013军用设备和分系统电磁发射和敏感度要求与测量(海军10项)
  4. JAVA架构图的设计与画法
  5. 计算机并口优点,并口光驱优缺点有哪些 并口光驱如何转串口
  6. YYKit笔记之FPS
  7. Javashop电商系统7.0发布
  8. javashop多用户商城系统源码
  9. 【方太】顺利通过CMMI3认证
  10. stm32——使用串口下载程序