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为我们提供了非常完善的基础代码库,覆盖了 ...
随机推荐
- 【学习】如何安装GraphLab Create 【转载】
前人走过的路不用再走,慢慢加上一些工具的链接 GraphLab Create安装,链接地址: http://www.imooc.com/article/18094?block_id=tuijian_w ...
- 转载:深入浅出Zookeeper
ZAB协议 ZAB协议是专门为zookeeper实现分布式协调功能而设计.zookeeper主要是根据ZAB协议是实现分布式系统数据一致性. zookeeper根据ZAB协议建立了主备模型完成zook ...
- centos nginx配置https
1.获取https证书: 用的阿里的免费证书: 参考:https://blog.csdn.net/chandoudeyuyi/article/details/71246255 2.修改nginx配置文 ...
- stm32 HAL库笔记(一)——串口的操作
昨天分析了普通io口的使用,和初始化代码流程,回顾一下,首先定义一个配置io口功能的结构体,然后开启时钟,再去配置这个结构体里面的各个成员变量,每个成员变量都有很多种选择,可以看各个成员变量 后面的注 ...
- java web复习(二)
三.四种属性范围及应用 setAttribute(String name,Object o)设置属性 getAttribute(String name)根据属性名取得属性 removeAttribut ...
- Django 2.0 新款URL配置详解
Django2.0发布后,很多人都拥抱变化,加入了2的行列.但是和1.11相比,2.0在url的使用方面发生了很大的变化,下面介绍一下: 一.实例 先看一个例子: from django.urls i ...
- samba实现CentOS和window上的数据同步
前言 之前做了一个项目,需要写python脚本来修改组件的安装方式,脚本是在windows下面的pycharm下面进行编写,但是编译要在linux上面进行分模块的maven编译,虽然之前也写了pych ...
- 1.PHP与Web页面的交互
一.概览: PHP是一种专门用于Web开发的服务器端脚本语言.从这个描述可以知道,PHP要打交道的对象主要有服务器(Server),和基于Web的HTML(超文本标识语言).使用PHP处理Web应用时 ...
- Navicat Premium 12激活教程
Navicat Premium 12激活教程 1.软件包的下载 百度云地址链接: 注册机:https://pan.baidu.com/s/1KzmCbVYcVoXt_t4osXk3Kw 提取码: q ...
- cmake: error: symbol(s) not found for architecture x86_64 mac os 使用boost asio
最近在使用boost的asio库,在mac osx 上编写网络服务程序报错: :-1: error: symbol(s) not found for architecture x86_64 然后在CM ...