什么叫元类?   年轻人先不要在意这些细节、我们一步一步的来!

001、

oop的世界里有一句话 “万物皆对象”

classPerson(object):

name=Noneif __name__=="__main__":

i=123s="hello world"p=Person()print(type(i)) #

print(type(s)) #

print(type(p)) #

print(type(int)) #

print(type(str)) #

print(type(Person)) #

我们来说一下上面代码的意思

1、前三句我们可以看出:i 是int 类的实例,s是str类的实例,p是Person类的实例;#我下面要说的话,可以让你感觉到不适

2、后三句我们可以看出:int,str,Person 这些类事实上它们都只是type类的一个实例!

002、

我真的没有逗你、type它真的是一个类呀!不信你help(type)看一下

classtype(object)|type(object_or_name, bases, dict)| type(object) -> the object's type

| type(name, bases, dict) ->a new type|

|Methods defined here:|

| __call__(self, /, *args, **kwargs)|Call self as a function.|

| __delattr__(self, name, /)|Implement delattr(self, name).|

| __dir__(...)| __dir__() ->list| specialized __dir__ implementation fortypes|

| __getattribute__(self, name, /)|Return getattr(self, name).|

| __init__(self, /, *args, **kwargs)| Initialize self. See help(type(self)) foraccurate signature.|

| __instancecheck__(...)| __instancecheck__() ->bool| check if an object isan instance|

| __new__(*args, **kwargs)| Create and return a new object. See help(type) for accurate signature.

003、

上文我们说到类事实上是type的实例、我现在根你说另一件事 所有继承自type的类都是元类

例子:

003、

为了得到满足我们要求的数据类型我们会自己去定义类、例如我们自己定义一个Person类

classPerson(object):

name=None

上面这两行是我们最常用的,用于定义类的方法了,有了Person 这个数据类型后我就可以创建类的实例了p=Person();

但是我们这里要讲的是python oop中的更加高级的话题---- 元类 。

classMode(type):def __new__(cls,name,bases,attrs):print("---- in __new__ fun")print("cls : {0}".format(cls)) #cls:

print("name: {0}".format(name)) #name: Person

print("bases: {0}".format(bases)) #bases: (,)

print("attrs: {0}".format(attrs)) #attrs: {'__module__': '__main__', '__qualname__': 'Person'}

deftoString(self):return '你好我的名字叫 {0} 今年 {1} 岁 !'.format(self.name,self.age)

attrs['toString']=toString

attrs['name']='蒋乐哥哥'attrs['age']=16

print(id(attrs))print("**** out __new__ fun")return type.__new__(cls,name,bases,attrs)def __init__(cls,name,bases,attrs):print("---- in __init__ fun")print("cls : {0}".format(cls)) #cls :

print("name: {0}".format(name)) #name: Person

print("bases: {0}".format(bases)) #bases: (,)

print("attrs: {0}".format(attrs)) #attrs: {'toString': .toString at 0x101cf5d90>, '__module__': '__main__', '__qualname__': 'Person'}

print("*** out __init__ fun")class Person(object,metaclass=Mode):pass

if __name__=="__main__":

p=Person()print(p.toString()) #你好我的名字叫 蒋乐哥哥 今年 16 岁 !

----

python元类编程_python元类编程相关推荐

  1. python元编程_python元编程详解(3)

    今天转载一片非常精彩的文章供大家欣赏:参考文章链接. python开发者门户一个很好的学习python的网站,大家有时间可以多看看. 下面正式开始今天的内容: 在理解元类之前,你需要先掌握Python ...

  2. python保存类对象_python 存储类对象吗

    Python源码读后小结 Python 笔记 前言(还是叫杂记吧) 在python中一切皆对象, python中的对象体系大致包含了"类型对象", "Mapping对象( ...

  3. python 图形化socket编程_Python黑帽编程2.8 套接字编程

    Python黑帽编程2.8 套接字编程 套接字编程在本系列教程中地位并不是很突出,但是我们观察网络应用,绝大多数都是基于Socket来做的,哪怕是绝大多数的木马程序也是如此.官方关于socket编程的 ...

  4. python的类包括_Python的类,复杂吗

    是菜鸟学python的第38篇原创文章 阅读本文大概需要6分钟 高级语言都有面对对象,Python也不例外,比起c++,java这些传统的语言,Python中的面对对象去掉了很多复杂的东西,理解和使用 ...

  5. python小老鼠编程_Python小老鼠编程,Python入门到精通(非常详细)

    公司介绍 苏州鼎锐软件科技有限公司成立于2011年,地处中国新加坡合作苏州工业园区的国际科技园,是一家专业从事技术和人才外包的软件服务公司.自成立以来,公司始终站在技术市场的最前端,与国外大型企业合作 ...

  6. python有什么内容_python的类(简介,没什么内容)

    参考: https://www.cnblogs.com/studyDetail/p/6446180.html (python的类) https://www.cnblogs.com/zunchang/p ...

  7. python面向对象的编程_python面向对象的编程

    创建类和对象 面向对象编程是一种编程方式,此编程方式的落地需要使用 "类" 和 "对象" 来实现,所以,面向对象编程其实就是对 "类" 和 ...

  8. redis python 出错重连_python穿透类 对象代理

    # coding:utf-8 import os import logging # 对象代理 # 用于解决需要在包调用与业务代码之间增加一些其他操作的场景 # 比如:应用程序中使用redis包对象,我 ...

  9. python3多线程编程_Python 3多线程编程学习笔记-基础篇

    本文是学习<Python核心编程>的学习笔记,介绍了Python中的全局解释器锁和常用的两个线程模块:thread, threading,并对比他们的优缺点和给出简单的列子. 全局解释器锁 ...

最新文章

  1. 一起学Windows phone 7开发(四. DeepZoom)
  2. html 悬浮阴影,css实现悬浮效果的阴影的方法示例
  3. Android开发之adb命令安装apk的问题
  4. 链表笔试题汇编(一)
  5. 模板:Link Cut Tree(LCT)
  6. 字节字符区别Java_【JAVA基础】字符数组与字节数组的区别
  7. oracle逻辑结构(2)
  8. 树莓派 红灯不亮_关闭树莓派的电源指示灯和状态指示灯
  9. 2013年思杰合作伙伴移动性解决方案巡展
  10. BZOJ5217[Lydsy2017省队十连测] 航海舰队
  11. 看你能坚持读几本书?!——三十本互联网必看书籍
  12. 天锐绿盾加密软件支持域控吗?
  13. [CM311-1A]-安卓设备视频分辨率 DPI 以及刷新率问题
  14. JavaCV调用摄像头
  15. c语言 error c2227,error C2227: left of '-first' must point to class/struct/union
  16. vscode 路径宏_VSCode宏怎么设置?VSCode宏的添加方法!
  17. 在blog中添加attachments功能 (修改系统Control)
  18. 【Codeforces 760 B Frodo and pillows】+ 二分
  19. java 文本框 虚体字_虚字的意思、虚的繁体字、虚的笔顺笔画、虚字部首和繁体字虚的意思...
  20. 微信小程序--图片懒加载

热门文章

  1. 使用Python批量删除windows下特定目录的N天前的旧文件实战:Windows下批量删除旧文件、清除缓存文件、解救C盘、拒绝C盘爆炸
  2. R语言ggpattern填充各种色彩、形状、纹理、图片到ggplot2可视化图像中示例
  3. R语言dplyr包mutate_all函数一次性处理所有的数据列的内容(使用统一的函数)实战
  4. R语言sample.int有放回或者无放回采样随机整数实战
  5. Plotly可视化输出数据表格(table):简单表格、添加链接的表格
  6. R循环函数(for、while、break、next)
  7. 相关系数(correlation coefficient)是什么?相关的类型有哪些?有哪些常用的计算方法?不同形态的点分布与相关系数之间的关系?如何评判相关性的强弱?
  8. Comparison of long-read sequencing technologies in the hybrid assembly of complex bacterial genomes
  9. Bicolor软件 中 GATB
  10. ikbc键盘自动打字_键盘按斤卖,一斤一百块?IKBC W200机械键盘简晒