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,并对比他们的优缺点和给出简单的列子. 全局解释器锁 ...
最新文章
- 【oracle】EM打不开的问题
- 江苏有线门户网站服务器地址,江苏有线手机客户端的登录服务器
- PHP 获取两个日期之间所有日期
- 《转》cout和printf的混用而产生的顺序问题
- linux中top工具,Linux命令工具 top详解
- 泰拉瑞亚试图加载不正确的_盘点那些著名的沙盒游戏?泰拉瑞亚堪称2D沙盒之王...
- 《Gabor feature based sparse representation for face recognition with gabor occlusion dictionary》
- Tera term的TTL脚本使用方法
- 分布式智能电网-BMS蓄电池安全管理系统在各行业应用
- 定量数据和定性数据_定性数据:赋予大数据意义的上下文
- 大数据分析师岗位是青春饭
- 群发邮箱的软件哪个好?2021协议邮件群发软件推荐?
- 计算机导论第七章数据库基础,计算机导论教学大纲
- 费马大定理 超级计算机,数学专业经典读物
- Java咖啡馆(4)——品味第一杯咖啡
- 【python】用turtle画七巧板
- 如何判断一个男人将来是穷还是富?
- 我在上海乐字节学习java的第二十五天(持续更新中)
- 电子电路测试软件,清华大学出版社-图书详情-《电子电路软件仿真实验教程》...
- opencv 帧差法 absdiff
热门文章
- R语言PCA主成分分析(Principle Component Analysis)实战2
- prefetch下载SRA 数据
- java SE环境变量配置
- 结构体struct 联合体 union
- pandas 删除数据
- tensorflow 的输入层和输出层维度注意事项
- 去水印--《On the Effectiveness of Visible Watermarks》
- 利用prototxt文件绘制网络的结构图
- 【tensorboard】从tensorboard上看出模型是否存在过拟合
- Python-PyCharm 报错解决:ImportError: cannot import name 'InteractiveConsole' from 'code'