Python全栈开发——面向对象进阶(一切皆对象)
1.isinstance(obj,cls) 检查obj是否是类cls的对象,
issubclass(sub,super) 检查sub是否是super的子类
#isinstance(obj,cls) 检查obj是否是类cls的对象 class Foo:pass f=Foo() print(isinstance(f,Foo)) #True#issubclass(sub,super) 检查sub是否是super的子类 class Bar(Foo):pass print(issubclass(Bar,Foo)) #Ture
2.反射(常用于可插拔方式)
3.__setattr__,__getattr__,__delattr__
4.二次加工标准类型(包装)
5.__getattribute__
class Foo:def __init__(self,y):self.y=y#有__getattribute__,则__getattr__不会触发#实际上只有触发AttributeError时,才会触发def __getattr__(self, item):print('getattr')#实例化访问时,不管存不存在属性,都会调用def __getattribute__(self, item):print('getattribute') f=Foo(3) f.c # getattribute f.y # getattribute
6.描述符(__get__,__set__,__delete__)
7.再看property
8.__setitem__,__getitem__,__delitem__
#通过字典形式访问才会触发,和内置attr差不多 class Foo:def __getitem__(self, item):print('getitem')def __setitem__(self, key, value):print('setitem')self.__dict__[key]=valuedef __delitem__(self, key):print('delitem')f=Foo() f['l']='k' #setitem print(f.__dict__) #{'l': 'k'} f['l'] #getitem del f['ff'] #delitem
9.__str__,__repr__,__format__
#__repr__,__str__ 控制对象的显示方式,一定有返回值,且为字符串形式 # print的原理就是输出___str__的信息,若找不到,用__repr__代替
class Foo:def __str__(self):return 'str'def __repr__(self):return 'repr'x=Foo() print(x) #str
#__format__
x='{0}-{0}-{0}'.format('d') print(x) #d-d-d Date_geshi={'ymd':'{0.year}-{0.month}-{0.day}','ydm':'{0.year}-{0.day}-{0.month}','mdy':'{0.month}-{0.day}-{0.year}', } class Date:def __init__(self,year,month,day):self.year=yearself.month=monthself.day=day#定制格式def __format__(self, format_spec='ymd'):if format_spec not in Date_geshi:print('没有该格式')format_spec = 'ymd'print(format_spec) # ymdreturn Date_geshi[format_spec].format(self)d=Date(2016,12,23) d1=d.__format__('hgfh') print(d1) # 2016-12-23 print(format(d,'mdy')) #相当于执行 d.__format__('mdy') # 12-23-2016
10.__slots__(如果一个属性很少的类,但是有很多 实例,为了节省内存,可以使用__slots__取代实例的__dict__)
class Foo: #设置之后,class没有__dict__属性了#也限制了创建,只能定义你定义的属性#只能定义__slots__提供的name,age__slots__ = ['name','age']f=Foo() f.name=13
11.__doc__(打印类文档)
12.__module__ 表示当前操作的对象在哪个模块
__class__ 表示当前操作的对像是哪个类
13.__del__析构方法
14__call__对象后面加括号,触发执行
class Foo:def __call__(self,*args,**kwargs):print('__call__')f=Foo() f() #__call__
15__next__,__iter__(迭代器协议)
class FBIF:def __init__(self,_a,_b):self.__a=_aself.__b=_bdef __iter__(self):return selfdef __next__(self):self.__a,self.__b=self.__b,self.__b+self.__areturn self.__a f=FBIF(1,1) print(next(f)) print(next(f)) print('---------------->') for i in f:print(i)if i>100:raise StopIteration('ffff')
16.__enter__,__exit__(被称为上下文管理协议)
with 的工作原理,实际上先调用__enter__,在结束时调用__exit__扫尾
转载于:https://www.cnblogs.com/lujiacheng-Python/p/9739314.html
Python全栈开发——面向对象进阶(一切皆对象)相关推荐
- python 全栈开发,Day116(可迭代对象,type创建动态类,偏函数,面向对象的封装,获取外键数据,组合搜索,领域驱动设计(DDD))...
昨日内容回顾 1. 三个类 ChangeList,封装列表页面需要的所有数据.StarkConfig,生成URL和视图对应关系 + 默认配置 AdminSite,用于保存 数据库类 和 处理该类的对象 ...
- Python全栈开发——面向对象的三大特性(继承 多态 封装)
1.继承 1.两层意思 改变和扩展(详细看随笔继承和组合) 2.多态(体现在运行时的状态) 1.不同的类可以调用相同的方法,得到不同的结果 2.实际上是继承的一种体现机制 class H2o:def ...
- python全栈开发中级班全程笔记(第三模块、第一章(1.面向对象基础))
python全栈开发笔记第三模块 第一部分 第一章 :面向对象(类) 一.面向过程编程1.面向过程编程:主要是过程二字,所谓过程,就是指解决问题的步骤,也可以说是设计一套流水线(机 ...
- python全栈开发要学些什么_战争热诚的python全栈开发之路
从学习python开始,一直是自己摸索,但是时间不等人啊,所以自己为了节省时间,决定报个班系统学习,下面整理的文章都是自己学习后,认为重要的需要弄懂的知识点,做出链接,一方面是为了自己找的话方便,一方 ...
- python视频网站项目_价值2400元的python全栈开发系列Flask Python Web 网站编程视频
2 e/ b4 F1 c' H$ D! X 价值2400元的python全栈开发系列Flask Python Web 网站编程视频-优品课堂' z3 _1 Y7 ]6 j4 z # p# r# g* ...
- python 全栈开发,Day112(内容回顾,单例模式,路由系统,stark组件)
python 全栈开发,Day112(内容回顾,单例模式,路由系统,stark组件) 一.内容回顾 类可否作为字典的key 初级 举例: class Foo(object):pass_registry ...
- python web全栈开发_价值2400元的python全栈开发系列Flask Python Web 网站编程视频教程...
课程目录 01-计算机基础常识.mp4 02-Python语言概览.安装与运行.mp4 03-Python 变量.数据类型及存储.mp4 04-Python 常用数据类型概览.mp4 05-数值与字符 ...
- python全栈开发中级班全程笔记(第二模块、第四章)(常用模块导入)
python全栈开发笔记第二模块 第四章 :常用模块(第二部分) 一.os 模块的 详解 1.os.getcwd() :得到当前工作目录,即当前python解释器所在目录路径 impor ...
- Python全栈开发【基础-09】深浅拷贝+while循环
专栏介绍: 本专栏为Python全栈开发系列文章,技术包括Python基础.函数.文件.面向对象.网络编程.并发编程.MySQL数据库.HTML.JavaScript.CSS.JQuery.boots ...
最新文章
- js如何运行python代码_python中执行javascript代码
- 图解设计模式:抽象工厂
- LIVE555建立RTSP服务记录
- ThinkPHP入门
- apache源码安装必须依赖的库apr----/etc/ld.so.conf 文件介绍
- 机构借贷平台 Maple 将上线以太坊主网并开启流动性挖矿
- CIO考虑采用超整合基础设施降低硬件成本
- 台大李宏毅Machine Learning 2017Fall学习笔记 (2)Linear Regression and Overfitting
- metadata文件_用Kubernetes部署Springboot或Nginx,也就一个文件的事
- Win7删除GRUB For DOS启动项
- 排列组合公式,用向量叉乘的办法计算平行四边形面积
- Excel数据去重(删除重复项)
- mindmanager2020官方下载永久激活版V20.1.237
- WPF 做的时钟表盘 加上天气预报
- calfcamel的2333(java)
- 不同CPU的MATLAB性能表现的简单对比方法
- 每天叫醒的不是闹钟而是励志文章梦想
- 软件工程导论--设计工程
- 视频教程-软考系统集成项目管理工程师视频教程(下)-软考
- 金蝶EAS WEB端多选F7赋值、保存与展示
热门文章
- 那些被踢“出局”的创始人,现在还好吗?
- java并发编程——并发编程的挑战
- THREE.ShaderMaterial
- Linux性能分析工具总结
- JS基础-特效篇-随机点名册
- ubuntu上关于anaconda虚拟环境配置
- Zeppelin(0.10.1版本)安装及创建hive解释器
- 【元胞自动机】元胞自动机双边教室疏散【含Matlab源码 1208期】
- ubuntu 修改默认用户名_Ubuntu更改用户名的方法
- 【Maven】子模块打包失败 pom.xml is not existed