python元类编程_python元类编程
什么叫元类? 年轻人先不要在意这些细节、我们一步一步的来!
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元类编程相关推荐
- python元编程_python元编程详解(3)
今天转载一片非常精彩的文章供大家欣赏:参考文章链接. python开发者门户一个很好的学习python的网站,大家有时间可以多看看. 下面正式开始今天的内容: 在理解元类之前,你需要先掌握Python ...
- python保存类对象_python 存储类对象吗
Python源码读后小结 Python 笔记 前言(还是叫杂记吧) 在python中一切皆对象, python中的对象体系大致包含了"类型对象", "Mapping对象( ...
- python 图形化socket编程_Python黑帽编程2.8 套接字编程
Python黑帽编程2.8 套接字编程 套接字编程在本系列教程中地位并不是很突出,但是我们观察网络应用,绝大多数都是基于Socket来做的,哪怕是绝大多数的木马程序也是如此.官方关于socket编程的 ...
- python的类包括_Python的类,复杂吗
是菜鸟学python的第38篇原创文章 阅读本文大概需要6分钟 高级语言都有面对对象,Python也不例外,比起c++,java这些传统的语言,Python中的面对对象去掉了很多复杂的东西,理解和使用 ...
- python小老鼠编程_Python小老鼠编程,Python入门到精通(非常详细)
公司介绍 苏州鼎锐软件科技有限公司成立于2011年,地处中国新加坡合作苏州工业园区的国际科技园,是一家专业从事技术和人才外包的软件服务公司.自成立以来,公司始终站在技术市场的最前端,与国外大型企业合作 ...
- python有什么内容_python的类(简介,没什么内容)
参考: https://www.cnblogs.com/studyDetail/p/6446180.html (python的类) https://www.cnblogs.com/zunchang/p ...
- python面向对象的编程_python面向对象的编程
创建类和对象 面向对象编程是一种编程方式,此编程方式的落地需要使用 "类" 和 "对象" 来实现,所以,面向对象编程其实就是对 "类" 和 ...
- redis python 出错重连_python穿透类 对象代理
# coding:utf-8 import os import logging # 对象代理 # 用于解决需要在包调用与业务代码之间增加一些其他操作的场景 # 比如:应用程序中使用redis包对象,我 ...
- python3多线程编程_Python 3多线程编程学习笔记-基础篇
本文是学习<Python核心编程>的学习笔记,介绍了Python中的全局解释器锁和常用的两个线程模块:thread, threading,并对比他们的优缺点和给出简单的列子. 全局解释器锁 ...
最新文章
- 一起学Windows phone 7开发(四. DeepZoom)
- html 悬浮阴影,css实现悬浮效果的阴影的方法示例
- Android开发之adb命令安装apk的问题
- 链表笔试题汇编(一)
- 模板:Link Cut Tree(LCT)
- 字节字符区别Java_【JAVA基础】字符数组与字节数组的区别
- oracle逻辑结构(2)
- 树莓派 红灯不亮_关闭树莓派的电源指示灯和状态指示灯
- 2013年思杰合作伙伴移动性解决方案巡展
- BZOJ5217[Lydsy2017省队十连测] 航海舰队
- 看你能坚持读几本书?!——三十本互联网必看书籍
- 天锐绿盾加密软件支持域控吗?
- [CM311-1A]-安卓设备视频分辨率 DPI 以及刷新率问题
- JavaCV调用摄像头
- c语言 error c2227,error C2227: left of '-first' must point to class/struct/union
- vscode 路径宏_VSCode宏怎么设置?VSCode宏的添加方法!
- 在blog中添加attachments功能 (修改系统Control)
- 【Codeforces 760 B Frodo and pillows】+ 二分
- java 文本框 虚体字_虚字的意思、虚的繁体字、虚的笔顺笔画、虚字部首和繁体字虚的意思...
- 微信小程序--图片懒加载
热门文章
- 使用Python批量删除windows下特定目录的N天前的旧文件实战:Windows下批量删除旧文件、清除缓存文件、解救C盘、拒绝C盘爆炸
- R语言ggpattern填充各种色彩、形状、纹理、图片到ggplot2可视化图像中示例
- R语言dplyr包mutate_all函数一次性处理所有的数据列的内容(使用统一的函数)实战
- R语言sample.int有放回或者无放回采样随机整数实战
- Plotly可视化输出数据表格(table):简单表格、添加链接的表格
- R循环函数(for、while、break、next)
- 相关系数(correlation coefficient)是什么?相关的类型有哪些?有哪些常用的计算方法?不同形态的点分布与相关系数之间的关系?如何评判相关性的强弱?
- Comparison of long-read sequencing technologies in the hybrid assembly of complex bacterial genomes
- Bicolor软件 中 GATB
- ikbc键盘自动打字_键盘按斤卖,一斤一百块?IKBC W200机械键盘简晒