七、面向对象高级

面向对象高级

  1. 常用的内置函数:
  2. 属性访问函数:是内置函数(都是操作实例对象的属性)

hasattr: 判断该实例对象是否存在该属性,hasattr(实例对象,属性)

返回值bool

C:\Users\巧克力\AppData\Local\Temp\1614067227(1).png

getattr:得到属性值,没有报错,getattr(实例对象,属性)

C:\Users\巧克力\AppData\Local\Temp\1614067849(1).png

setattr:设置属性(增加,修改,有就修改,没有就增加),setattr(实例对象,属性,属性值)

C:\Users\巧克力\AppData\Local\Temp\1614068688(1).png

delattr:删除属性

C:\Users\巧克力\AppData\Local\Temp\1614068980(1).png

  1. 内置方法操作属性

对象.__getattribute__(属性):获取该实例对象的指定属性值,没有会报错

对象.__setattr__(属性, 属性值):设置该实例对象的属性值,有就修改,没有就增加,无返回值

对象.__delattr__(属性):删除该实例对象的属性,无返回值

  1. 对象关系方法:是内置函数,判断
  2. 属性调用过程
  3. 魔法方法
  4. 定义:两个下划线在两边,中间是单词,有特殊含义的方法我们称为魔法方法,一般都是python已经规定好的(特殊情况会被自动调用)

C:\Users\巧克力\AppData\Local\Temp\1614073992(1).png

  1. __new__()方法:创建实例,最先执行,我们的实例对象是通过object的__new__魔法方法创建的,__new__是创建实例

C:\Users\巧克力\AppData\Local\Temp\1614073747(1).png

  1. 单例模式:类始终只有一个实例存在,不会同时出现多个实例,是为了节约空间,是一种设计模式(为了优化代码)

C:\Users\巧克力\AppData\Roaming\Tencent\Users\2947131463\QQ\WinTemp\RichOle\N%GZV]H{WDZ%MO~XE`07GR8.png

单列模式的另一种写法

C:\Users\巧克力\AppData\Local\Temp\1614085871(1).png

  1. 输出魔法方法:__str__(),__repr__()

__str__():重新修改该方法,改变实例对象输出显示的内容(不显示地址,显示有用的属性数据),print的时候执行

C:\Users\巧克力\AppData\Local\Temp\1614087179(1).png

__repr__():重写该方法,改变实例对象在交互模式中,直接写变量名显示的内容,交互模式,直接输入实例变量名执行

C:\Users\巧克力\AppData\Local\Temp\1614087457(1).png

__call__(self,x,y): 变成函数一样可以调用

C:\Users\巧克力\AppData\Roaming\Tencent\Users\2947131463\QQ\WinTemp\RichOle\F2E1NPLBZLY@6]F5IN1K($M.png

  1. 协议
  2. 定义:类似于我们实际生活中的合同,你签订了这份协议,就得按照指定的来,我会给你对应的功能(甲方:提供给你对应的功能;乙方:按规定来使用)
  3. 格式:协议的格式有一定要求,有些的是需要有return
  4. 作用:让我们自己定义类能够使用python提供的功能,一些内置函数
  5. 本质:魔法方法
  6. 枚举函数:enumerate(列表)
  7. 序列协议:就是让类有,序列类型的功能,必须有__len__, __getitem__,__setitem__,__delitem__等协议,如果不需要改变,那后两个就不要定义

C:\Users\巧克力\AppData\Local\Temp\1614128359(1).png

  1. 迭代协议:只要类实现了__iter__ 和 __next__ 方法,则这个类就是迭代器,因此只要实现这两个方法,则是可以迭代对象。让我们的类变成可迭代的类,能够使用for循环迭代

C:\Users\巧克力\AppData\Local\Temp\1614165448(1).png

  1. 上下文协议:我们之前讲过的with的使用,只要类里面定义__enter__和__exit__这两个方法,则可以使用with去使用此对象。with关键字缩进里面的代码之前会执行__enter__协议方法,缩进里面的代码执行完会执行__exit__方法。

C:\Users\巧克力\AppData\Local\Temp\1614166230(1).png

posted @ 2023-09-06 16:25  chocolateone  阅读(16)  评论(0)    收藏  举报