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全栈开发——面向对象进阶(一切皆对象)相关推荐

  1. python 全栈开发,Day116(可迭代对象,type创建动态类,偏函数,面向对象的封装,获取外键数据,组合搜索,领域驱动设计(DDD))...

    昨日内容回顾 1. 三个类 ChangeList,封装列表页面需要的所有数据.StarkConfig,生成URL和视图对应关系 + 默认配置 AdminSite,用于保存 数据库类 和 处理该类的对象 ...

  2. Python全栈开发——面向对象的三大特性(继承 多态 封装)

    1.继承 1.两层意思 改变和扩展(详细看随笔继承和组合) 2.多态(体现在运行时的状态) 1.不同的类可以调用相同的方法,得到不同的结果 2.实际上是继承的一种体现机制 class H2o:def ...

  3. python全栈开发中级班全程笔记(第三模块、第一章(1.面向对象基础))

    python全栈开发笔记第三模块           第一部分 第一章 :面向对象(类) 一.面向过程编程1.面向过程编程:主要是过程二字,所谓过程,就是指解决问题的步骤,也可以说是设计一套流水线(机 ...

  4. python全栈开发要学些什么_战争热诚的python全栈开发之路

    从学习python开始,一直是自己摸索,但是时间不等人啊,所以自己为了节省时间,决定报个班系统学习,下面整理的文章都是自己学习后,认为重要的需要弄懂的知识点,做出链接,一方面是为了自己找的话方便,一方 ...

  5. 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* ...

  6. python 全栈开发,Day112(内容回顾,单例模式,路由系统,stark组件)

    python 全栈开发,Day112(内容回顾,单例模式,路由系统,stark组件) 一.内容回顾 类可否作为字典的key 初级 举例: class Foo(object):pass_registry ...

  7. python web全栈开发_价值2400元的python全栈开发系列Flask Python Web 网站编程视频教程...

    课程目录 01-计算机基础常识.mp4 02-Python语言概览.安装与运行.mp4 03-Python 变量.数据类型及存储.mp4 04-Python 常用数据类型概览.mp4 05-数值与字符 ...

  8. python全栈开发中级班全程笔记(第二模块、第四章)(常用模块导入)

    python全栈开发笔记第二模块 第四章 :常用模块(第二部分)     一.os 模块的 详解 1.os.getcwd()    :得到当前工作目录,即当前python解释器所在目录路径 impor ...

  9. Python全栈开发【基础-09】深浅拷贝+while循环

    专栏介绍: 本专栏为Python全栈开发系列文章,技术包括Python基础.函数.文件.面向对象.网络编程.并发编程.MySQL数据库.HTML.JavaScript.CSS.JQuery.boots ...

最新文章

  1. js如何运行python代码_python中执行javascript代码
  2. 图解设计模式:抽象工厂
  3. LIVE555建立RTSP服务记录
  4. ThinkPHP入门
  5. apache源码安装必须依赖的库apr----/etc/ld.so.conf 文件介绍
  6. 机构借贷平台 Maple 将上线以太坊主网并开启流动性挖矿
  7. CIO考虑采用超整合基础设施降低硬件成本
  8. 台大李宏毅Machine Learning 2017Fall学习笔记 (2)Linear Regression and Overfitting
  9. metadata文件_用Kubernetes部署Springboot或Nginx,也就一个文件的事
  10. Win7删除GRUB For DOS启动项
  11. 排列组合公式,用向量叉乘的办法计算平行四边形面积
  12. Excel数据去重(删除重复项)
  13. mindmanager2020官方下载永久激活版V20.1.237
  14. WPF 做的时钟表盘 加上天气预报
  15. calfcamel的2333(java)
  16. 不同CPU的MATLAB性能表现的简单对比方法
  17. 每天叫醒的不是闹钟而是励志文章梦想
  18. 软件工程导论--设计工程
  19. 视频教程-软考系统集成项目管理工程师视频教程(下)-软考
  20. 金蝶EAS WEB端多选F7赋值、保存与展示

热门文章

  1. 那些被踢“出局”的创始人,现在还好吗?
  2. java并发编程——并发编程的挑战
  3. THREE.ShaderMaterial
  4. Linux性能分析工具总结
  5. JS基础-特效篇-随机点名册
  6. ubuntu上关于anaconda虚拟环境配置
  7. Zeppelin(0.10.1版本)安装及创建hive解释器
  8. 【元胞自动机】元胞自动机双边教室疏散【含Matlab源码 1208期】
  9. ubuntu 修改默认用户名_Ubuntu更改用户名的方法
  10. 【Maven】子模块打包失败 pom.xml is not existed