python基础之Day24
1.补充内置函数
2.反射
什么是?
通过字符串操作类或者对象的属性
hasattri(a,"b") 判断能否访问到a.b
setattri(a,"b",c)设置a.b=c
3.自定义内置方法定制类的功能
对象被打印时自动触发__str__
__del__用在回收应用程序对象时候顺便把占的操作系统的资源也回收
4.元类
什么是?
py中一切皆对象,用class 关键字定义的类本身也是对象,负责产生该对象的类为元类
为何用?
元类负责产生类的,所以学习元类或者自定义元类的目的是控制类的产生过程,还可以控制对象的产生过程
如何用?
exec 的用法:
将字符串中的代码提取出来运行,运行字符串内的代码
创建类的三要素:
类名,基类,类的名称空间
class_name="people"
class_bases=(object,) 元组
class_dic={}
class_body=''' '''
exec(class_body,{},class_dic)
people=type(class_name,class_bases,class_dic)
创建类的两种方法:
1.用的class关键字创建,默认元类是type
如果类也是对象的话,该过程也是实例化
2.用自定义的元类
class Mymeta:
pass
class people(object,metaclass=Mymeta):
pass
分析自定义类的原理,非元类的原理
1.拿到字符串格式的类名 "people"
2.拿到类的基类们__bases__(object,)
3.执行类体代码,拿到名称空间 class_dic={}
4.调用people=type(class_bases,class_bases,class_dic)
class mymate(type) 只有继承了type才是元类,否则是个普通的自定义类
自定义元类控制类的产生过程,类的产生过程其实就是元类的调用过程,即类的实例化过程
class Foo()
pass
obj=Foo()
obj()
对象的类中定义__call__
要想调用obj,必须控制Foo(元类)中的call方法
把类也看成对象,也需要call方法
调用
自定义类的实例化过程
1.在mymeta里面先造people的空对象obj= self.__new__(self) #括号里传self,就是people
__new__的顺序:查找从people找到mymeta再到type
2.初始化独有的属性 self.__init__(obj.*args,**kwargs) 调用people是调用call方法 3.return obj #返回初始化好的对象
python基础之Day24的更多相关文章
- python基础——列表推导式
python基础--列表推导式 1 列表推导式定义 列表推导式能非常简洁的构造一个新列表:只用一条简洁的表达式即可对得到的元素进行转换变形 2 列表推导式语法 基本格式如下: [expr for va ...
- python之最强王者(2)——python基础语法
背景介绍:由于本人一直做java开发,也是从txt开始写hello,world,使用javac命令编译,一直到使用myeclipse,其中的道理和辛酸都懂(请容许我擦干眼角的泪水),所以对于pytho ...
- Python开发【第二篇】:Python基础知识
Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...
- Python小白的发展之路之Python基础(一)
Python基础部分1: 1.Python简介 2.Python 2 or 3,两者的主要区别 3.Python解释器 4.安装Python 5.第一个Python程序 Hello World 6.P ...
- Python之路3【第一篇】Python基础
本节内容 Python简介 Python安装 第一个Python程序 编程语言的分类 Python简介 1.Python的由来 python的创始人为吉多·范罗苏姆(Guido van Rossum) ...
- 进击的Python【第三章】:Python基础(三)
Python基础(三) 本章内容 集合的概念与操作 文件的操作 函数的特点与用法 参数与局部变量 return返回值的概念 递归的基本含义 函数式编程介绍 高阶函数的概念 一.集合的概念与操作 集合( ...
- 进击的Python【第二章】:Python基础(二)
Python基础(二) 本章内容 数据类型 数据运算 列表与元组的基本操作 字典的基本操作 字符编码与转码 模块初探 练习:购物车程序 一.数据类型 Python有五个标准的数据类型: Numbers ...
- Python之路【第一篇】python基础
一.python开发 1.开发: 1)高级语言:python .Java .PHP. C# Go ruby c++ ===>字节码 2)低级语言:c .汇编 2.语言之间的对比: 1)py ...
- python基础之day1
Python 简介 Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. Python为我们提供了非常完善的基础代码库,覆盖了 ...
随机推荐
- Linux守护进程管理利器——Supervisor
Supervisor是采用 Python(2.4+) 开发的,它是一个允许用户管理 基于 Unix 系统进程的 Client/Server 系统,提供了大量功能来实现对进程的管理.安装: yum in ...
- 201772020113李清华《面向对象程序设计(java)》第九周学习总结
1.实验目的与要求 (1) 掌握java异常处理技术: (2) 了解断言的用法: (3) 了解日志的用途: (4) 掌握程序基础调试技巧: 2.实验内容和步骤 实验1:用命令行与IDE两种环境下编辑调 ...
- Ajax学习笔记——基本原理
Ajax(Asynchronous JavaScript + XML)不是语音,不是框架,也不能算是一种技术,而是一种模式.通过这种模式实现不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内 ...
- Android短信过滤项目中的观察者模式
观察者模式: 观察者模式定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新. 观察者模式提供了一种对象设计, 让主题和观察者之间松耦合.主题只知道观察者实现了某个接 ...
- 统计不同渠道的的UV,再合计渠道总计UV
( SELECT `统计时间`, `贷款公司名称`, `推广员姓名`, UV FROM ac_statistics WHERE `贷款公司名称` = "金腰袋" AND `统计时间 ...
- 【396】python 递归练习题(COMP9021)
Merging two strings into a third one Say that two strings s1 and s2 can be merged into a third strin ...
- Dostoevsky: Better Space-Time Trade-Offs for LSM-Tree Based Key-Value Stores via Adaptive Removal of Superfluous Merging 阅读笔记
Introduction 主流的基于LSM树的KV存储都在两方面进行权衡,一方面是写入更新的开销,另一方面是查询和存储空间的开销.但它们都不是最优的,问题在于这些存储系统在LSM树的每一个level上 ...
- Python来袭,教你用Neo4j构建“复联4”人物关系图谱!
来源商业新知网,原标题:Python来袭,教你用Neo4j构建“复联4”人物关系图谱!没有剧透! 复仇者联盟 之绝对不剧透 漫威英雄们为了不让自己剧透也是使出了浑身解数.在洛杉矶全球首映礼上记者费尽心 ...
- 前端(HTML)初始
一.用socket实现HTML的原理 import socket sk = socket.socket() sk.bind(('127.0.0.1',8080)) sk.listen() while ...
- java将一个List赋值给另一个List
声明和实例化: 声明:ArrayList a, 仅仅只是声明了一个list变量,其未来作用相当于C++中的引用变量,亦或者相当于一个对象块的索引,但并未为其分配具体的完整的对象所需要的内存空间,其所分 ...