1.哈哈哈,说实话,前面的foamat格式化并不是很懂:

举例:

1 date_format={2 "y-m-d":"{0.year}年{0.month}月{0.day}日",3 "y:m:d":"{0.year}:{0.month}:{0.day}"

4 }5 classDate():6 def __init__(self,year,month,day):7 self.year=year8 self.month=month9 self.day=day10 def __format__(self, format_spec):11 if not format_spec or format_spec not indate_format:12 return "请重新输入正确的日期格式"

13 else:14 fm=date_format[format_spec]15 returnfm.format(self)16 d=Date(2018,9,26)17 print(format(d,"y:m:d"))18 print(format(d,"y-m-d"))19 print(format(d,"qwe"))20

21

22

23 #############

24 2018:9:26

25 2018年9月26日26 请重新输入正确的日期格式

View Code

2.__slots__

作用:定义__slots__后,__slots__就会为实例使用一种更加紧凑的内部表示。实例通过一个很小的固定大小的数组来构建,而不是为每个实例定义一个字典,这跟元组或列表很类似。在__slots__中列出的属性名在内部被映射到这个数组的指定小标上。使用__slots__一个不好的地方就是不能再给实例添加新的属性了,只能使用在__slots__中定义的那些属性名。定义了__slots__后的类不再 支持一些普通类特性了,比如多继承。大多数情况下,应该只在那些经常被使用到 的用作数据结构的类上定义__slots__比如在程序中需要创建某个类的几百万个实例对象 。

关于__slots__的一个常见误区是它可以作为一个封装工具来防止用户给实例增加新的属性。尽管使用__slots__可以达到这样的目的,但是这个并不是它的初衷。更多的是用来作为一个内存优化工具。

举例:定义它了之后,就没有属性字典了(报错)。

1 classAa():2 _slots__=__slots__=['name','age'] #就是等于{'name':None,'age':None}

3 print("啦啊啊啊啊啊啊啊啦啦啦,是时候表演真正的技术了")4 a=Aa()5 print(a.__dict__)6

7 ############

8

9 啦啊啊啊啊啊啊啊啦啦啦,是时候表演真正的技术了10 Traceback (most recent call last):11 File "E:/Python/_demo/_demo1.py", line 560, in

12 print(a.__dict__)13 AttributeError: 'Aa' object has no attribute '__dict__'

View Code

1 classAa():2 _slots__=__slots__=['name','age'] #就是等于{'name':None,'age':None}

3 print("啦啊啊啊啊啊啊啊啦啦啦,是时候表演真正的技术了")4 a=Aa()5 a.name="小猪猪"

6 a.age=18

7 print(a.name)8 print(a.age)9 print(Aa.__slots__)10 print(a.__slots__)11

12 ################

13

14 啦啊啊啊啊啊啊啊啦啦啦,是时候表演真正的技术了15 小猪猪16 18

17 ['name', 'age']18 ['name', 'age']

View Code

赋值其中没有定义的属性报错:

1 classAa():2 _slots__=__slots__=['name','age'] #就是等于{'name':None,'age':None}

3 print("啦啊啊啊啊啊啊啊啦啦啦,是时候表演真正的技术了")4 a=Aa()5 a.gender="女"

6 print(a.gender)7 print(Aa.__slots__)8 print(a.__slots__)9

10 #################

11 啦啊啊啊啊啊啊啊啦啦啦,是时候表演真正的技术了12 Traceback (most recent call last):13 File "E:/Python/_demo/_demo1.py", line 560, in

14 a.gender="女"

15 AttributeError: 'Aa' object has no attribute 'gender'

View Code

3.__doc__

描述信息:不能被继承

1 classAa():2 '我是描述信息'

3 print(">>>>>>>>>>>>>>>>>>>>>>")4 classBb(Aa):5 print("<<<<<<<<<<<<<<<<<<<<<<<<

10

11

12 #########

13 >>>>>>>>>>>>>>>>>>>>>>

14 <<<<<<<<<<<<<<<<<<<<<<<<<

15 我是描述信息16 None

View Code

4.

__module__ 表示当前操作的对象在那个模块

__class__     表示当前操作的对象的类是什么

1 from demo3.demo2 importC2

3 c=C()4 print(c.__module__)5 print(c.__class__)6

7

8 ########

9 demo3.demo210

View Code

5.__call__

对象后面加括号,触发执行。

注:构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()

1 classFoo:2

3 def __init__(self):4 pass

5

6 def __call__(self, *args, **kwargs):7

8 print('__call__')9

10

11 obj = Foo() #执行 __init__

12 obj() #执行 __call__

13

14

15 ###############

16 __call__

View Code

6.

__next__和__iter__实现迭代器协议

1 classFoo:2 def __init__(self,n):3 self.n=n4 def __iter__(self):5 returnself6

7 def __next__(self):8 if self.n == 13:9 raise StopIteration('终止了')10 self.n+=1

11 returnself.n12

13 f1=Foo(10)14

15 for i in f1: #obj=iter(f1)------------>f1.__iter__()

16 print(i) #obj.__next_()

17

18 ####################

19 11

20 12

21 13

View Code

7. 描述符(__get__,__set__,__delete__)

(1)描述符是什么:描述符本质就是一个新式类,在这个新式类中,至少实现了__get__(),__set__(),__delete__()中的一个,这也被称为描述符协议.

__get__():调用一个属性时,触发

__set__():为一个属性赋值时,触发

__delete__():采用del删除属性时,触发

包含这三个方法的新式类称为描述符,由这个类产生的实例进行属性的调用/赋值/删除,并不会触发这三个方法

1 #####定义一个描述符

2 classAoo():3 def __get__(self, instance, owner):4 print("执行__get__方法啦")5 def __set__(self, instance, value):6 print("执行__set__方法啦")7 def __delete__(self, instance):8 print("执行__delete__方法啦")

View Code

(2)描述符的作用:是用来代理另外一个类的属性的(必须把描述符定义成这个类的类属性,不能定义到构造函数中)

1 #####定义一个描述符

2 classAoo():3 def __get__(self, instance, owner):4 print("执行__get__方法啦")5 def __set__(self, instance, value):6 print("执行__set__方法啦")7 def __delete__(self, instance):8 print("执行__delete__方法啦")9

10 classBoo():11 i=Aoo()##################定义到类属性里面喔

12 def __init__(self,n):13 self.i=n

View Code

(3)描述符分两种

一 数据描述符:至少实现了__get__()和__set__()

非数据描述符:没有实现__set__()

(4)注意事项:

一 描述符本身应该定义成新式类,被代理的类也应该是新式类

二 必须把描述符定义成这个类的类属性,不能为定义到构造函数中

三 要严格遵循该优先级,优先级由高到底分别是

1.类属性

2.数据描述符

3.实例属性

4.非数据描述符

5.找不到的属性触发__getattr__()

此处差个示例:

啦啦啦啦啦啦啦

7.__enter__和__exit__

(1)上下文管理协议,即with语句,为了让一个对象兼容with语句,必须在这个对象的类中声明__enter__和__exit__方法

1 #with open("a.txt","rb") as f:

2 #pass

3 ## open("a.txt","rb")这个就是类似于实例化一个对象,

4 ## as f对象重新命名为f

View Code

(2)没有异常的情况下,整个代码块运行完毕后去触发__exit__,它的三个参数都为None

1 classAa():2 def __init__(self,name):3 self.name=name4 def __enter__(self):5 print("__enter__执行了")6 def __exit__(self, exc_type, exc_val, exc_tb):7 print("啦啦啦,被我打败了")8 print(exc_type)9 print(exc_val)10 print(exc_tb)11 with Aa("a.txt") as f:12 print(f)13

14

15

16 ###################

17 __enter__执行了

18 None19 啦啦啦,被我打败了20 None21 None22 None

View Code

(3)有异常的情况下,从异常出现的位置直接触发__exit__

如果__exit__的返回值为True,代表吞掉了异常(不会出现报错)

__exit__的的运行完毕就代表了整个with语句的执行完毕

1 classAa():2 def __init__(self,name):3 self.name=name4 def __enter__(self):5 print("__enter__执行了")6 def __exit__(self, exc_type, exc_val, exc_tb):7 print("啦啦啦,被我打败了")8 #print(exc_type)

9 #print(exc_val)

10 #print(exc_tb)

11 returnTrue12 with Aa("a.txt") as f:13 print("》》》》》》》》")14 print(f.name)15

16 #################

17 __enter__执行了

18 》》》》》》》》19 啦啦啦,被我打败了

View Code

(4)有异常的情况下,从异常出现的位置直接触发__exit__

如果__exit__的返回值不为True,代表吐出了异常

__exit__的的运行完毕就代表了整个with语句的执行完毕

1 classAa():2 def __init__(self,name):3 self.name=name4 def __enter__(self):5 print("__enter__执行了")6 def __exit__(self, exc_type, exc_val, exc_tb):7 print("啦啦啦,被我打败了")8 #print(exc_type)

9 #print(exc_val)

10 #print(exc_tb)

11 return False###简单粗暴,直接为false

12 with Aa("a.txt") as f:13 print("》》》》》》》》")14 print(f.name)15

16 ##################

17 Traceback (most recent call last):18 File "E:/Python/_demo/_demo1.py", line 612, in

19 print(f.name)20 AttributeError: 'NoneType' object has no attribute 'name'

21 __enter__执行了

22 》》》》》》》》23 啦啦啦,被我打败了

View Code

__exit__的的运行完毕就代表了整个with语句的执行完毕,后面的代码则不会运行了。

1 classAa():2 def __init__(self,name):3 self.name=name4 def __enter__(self):5 print("__enter__执行了")6 def __exit__(self, exc_type, exc_val, exc_tb):7 print("啦啦啦,被我打败了")8 #print(exc_type)

9 #print(exc_val)

10 #print(exc_tb)

11 return False###简单粗暴,直接为false

12 with Aa("a.txt") as f:13 print("》》》》》》》》")14 print(f.name)15 print("》》》》》》》》》》????????")16 print("》》》》》》》》》》。。")17 print("》》》》》》》》》》????????")18 print("》》》》》》》》》》。。")19

20 ########################################

21 __enter__执行了

22 》》》》》》》》23 啦啦啦,被我打败了24 Traceback (most recent call last):25 File "E:/Python/_demo/_demo1.py", line 612, in

26 print(f.name)27 AttributeError: 'NoneType' object has no attribute 'name'

View Code

python3中format方法_python3 自定制format格式化,很多很多的内置方法。。。。。。。。。。。...相关推荐

  1. python 类的内置方法_【转】[python] 类常用的内置方法

    原文:http://xukaizijian.blog.163.com/blog/static/170433119201111894228877/ 内置方法 说明 __init__(self,...) ...

  2. Python基础总结之常用内置方法总结

    文章目录 前言 1.str 1.1.内置方法: 1.2.常用的内置方法 1.3.String模块的一些方法 2.list 2.1.内置方法 2.2.常用内置方法 3.tupple 3.1.内置方法 3 ...

  3. python的内置字典数据类型_python 数据类型元组与字典内置方法

    1.元组 (1)元组是不可变的列表,能存多个值:如果多个值只有取得需求,没有改的需求,用元组最合理 (2)定义:在()内用逗号隔开,可以存任意类型的值 注意:当元组只有一个元素时,要在后面加逗号 # ...

  4. python的四种内置数字类型_浅析Python数字类型和字符串类型的内置方法

    一.数字类型内置方法 1.1 整型的内置方法 作用 描述年龄.号码.id号 定义方式 x = 10 x = int('10') x = int(10.1) x = int('10.1') # 报错 内 ...

  5. python内置类型方法_浅析Python数字类型和字符串类型的内置方法

    一.数字类型内置方法 1.1 整型的内置方法 作用 描述年龄.号码.id号 定义方式 x = 10 x = int('10') x = int(10.1) x = int('10.1') # 报错 内 ...

  6. python如何判断字典中是否存在某个键_总结:11个Python3字典内置方法大全及示例...

    概述 字典有着类似列表的高灵活度的特点,而与列表通过偏移索引的存取元素的方式不同,字典是通过无序的键来存取键值对的,即字典是任意对象的无需集合,可在原处增加或减少,且支持任意深度的嵌套(即可以包含诸如 ...

  7. python的装饰器迭代器与生成器_python3 装饰器、列表生成器、迭代器、内置方法详解等(第四周)...

    前言: 为什么要学习python3? 原因: 1.学习一门语言能力 2.通过该语言能力完成测试自动化以及独立完成自测框架知识 那么我要做什么呢? 1.每天花十个小时完成python3的学习 要在什么地 ...

  8. python类的内置方法_python面向对象之类中的内置方法

    __setattr__,__delattr__,__getattr__,__getattribute__以及标准类型的二次加工 __setattr__,__delattr__,__getattr__的 ...

  9. angular 判断字符串为空_总结:44个Python3字符串内置方法大全及示例

    概述 Python中字符串是作为一种强大的处理工具集的存在,而不是类C中使用的那么难受.因为Python提供了一系列字符串操作的方法,从大小写转换.切片操作到查找等等应有尽有,几乎满足日常的使用场景, ...

最新文章

  1. cmd切换python版本-cmd 切换python版本
  2. I Love You的真正含义
  3. 【ABAP】文本表查找
  4. 库函数和系统调用的区别
  5. keepalive日志_12.日志收集项目-数据流图以及nginx安装
  6. 无需付费,教你IDEA社区版中使用Tomcat
  7. Kinect for Windows v2.0安装教程
  8. WiMAX版图不止3G
  9. selectprovider 分页_修改EFOracleProvider——解决分页排序问题
  10. 【Linux】自主实现my_sleep【转】
  11. 海量实时广告流平台(DSP广告系统)架构设计与实践
  12. VirtualBox中出现“0x00000000指令引用的0x00000000内存该内存不能为written 和visual studio Just in time debugger error
  13. Apple Pay编程指南(6) -沙盒测试
  14. “天鹅”类谜解大全!(转载)
  15. CDH6.2环境中启用Kerberos
  16. Ubuntu视频没有声音
  17. 前端:下拉选项框及文本框的实现
  18. 修改tomcat端口号并部署项目
  19. 工作了这么长时间,是不是非用macbook pro不可呢?
  20. SpringBoot项目打jar后执行jar包提示:xx没有主属性清单 解决

热门文章

  1. Deformable 可变形的DETR
  2. Ascend Pytorch算子功能验证
  3. 不是都需要ARM吗?
  4. 如何为嵌入式应用选择适当的SSD
  5. Kaggle上的犬种识别(ImageNet Dogs)
  6. setTimeout、setInterval、promise、async/await的顺序详解(多种情况,非常详细~)
  7. ERROR: Failed to resolve: com.android.databinding:library:3.4.2
  8. 【luogu3398】 仓鼠找sugar [LCA 倍增]
  9. 洛谷P4053 [JSOI2007]建筑抢修
  10. sqli-labs:5-6,盲注