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

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. 【oracle】EM打不开的问题
  2. 江苏有线门户网站服务器地址,江苏有线手机客户端的登录服务器
  3. PHP 获取两个日期之间所有日期
  4. 《转》cout和printf的混用而产生的顺序问题
  5. linux中top工具,Linux命令工具 top详解
  6. 泰拉瑞亚试图加载不正确的_盘点那些著名的沙盒游戏?泰拉瑞亚堪称2D沙盒之王...
  7. 《Gabor feature based sparse representation for face recognition with gabor occlusion dictionary》
  8. Tera term的TTL脚本使用方法
  9. 分布式智能电网-BMS蓄电池安全管理系统在各行业应用
  10. 定量数据和定性数据_定性数据:赋予大数据意义的上下文
  11. 大数据分析师岗位是青春饭
  12. 群发邮箱的软件哪个好?2021协议邮件群发软件推荐?
  13. 计算机导论第七章数据库基础,计算机导论教学大纲
  14. 费马大定理 超级计算机,数学专业经典读物
  15. Java咖啡馆(4)——品味第一杯咖啡
  16. 【python】用turtle画七巧板
  17. 如何判断一个男人将来是穷还是富?
  18. 我在上海乐字节学习java的第二十五天(持续更新中)
  19. 电子电路测试软件,清华大学出版社-图书详情-《电子电路软件仿真实验教程》...
  20. opencv 帧差法 absdiff

热门文章

  1. R语言PCA主成分分析(Principle Component Analysis)实战2
  2. prefetch下载SRA 数据
  3. java SE环境变量配置
  4. 结构体struct 联合体 union
  5. pandas 删除数据
  6. tensorflow 的输入层和输出层维度注意事项
  7. 去水印--《On the Effectiveness of Visible Watermarks》
  8. 利用prototxt文件绘制网络的结构图
  9. 【tensorboard】从tensorboard上看出模型是否存在过拟合
  10. Python-PyCharm 报错解决:ImportError: cannot import name 'InteractiveConsole' from 'code'