IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 马哥门徒DEVOPS第九周 -> 正文阅读

[开发测试]马哥门徒DEVOPS第九周

1. 什么是类和实例并说明他们之间的关系

类对象是将具有相似属性和方法的对象总结抽象为类对象,可以定义相似的一些属性和方法,不同的实例对象去引用类对象的属性和方法,能减少代码的重复率。
实例对象又称实例化对象,不是抽象而是一类对象中具体的一例对象。
类是由一些语句组成,但是实例,是通过调用类生成,每次调用一个类,就得到这个类的新的实例。
主要的区别:
定义类方法主要是要加一个装饰器,@classmethod而实例方法没有这个装饰器。这是区别实例方法和类方法的最主要的区别。
在调用上的区别在于,实例方法要先实例化一个对象再调用这个实例化方法,而类方法不需要有类的实例,直接类名.方法名就可以调用。

实例方法至少有一个参数,通常用self,这个参数里面是这个实例本身。类方法至少有一个参数,通常用cls,这个参数里面是这个类本身。
实例方法由于有实例,所以实例的属性对其实可见的,但类方法显然没有属性。
在这里插入图片描述

2. 类的实例方法、类方法和静态分别如何定义举例说明,并总结它们的应用场景

python 类语法中有三种方法,实例方法,静态方法,类方法。
实例方法:
普通实例方法,第一个参数需要是self,它表示一个具体的实例本身。
实例方法或者叫对象方法,指的是我们在类中定义的普通方法。
只有实例化对象之后才可以使用的方法,该方法的第一个形参接收的一定是对象本身。
静态方法
如果用了装饰器@staticmethod,那么就可以无视这个self,而将这个方法当成一个普通的函数使用。
(1).格式:在方法上面添加 @staticmethod
(2).参数:静态方法可以有参数也可以无参数
(3).应用场景:一般用于和类对象以及实例对象无关的代码。
(4).使用方式: 类名.类方法名(或者对象名.类方法名)。
类方法:
而对于装饰器@classmethod,它的第一个参数不是self,是cls,它表示这个类本身。
(1).在方法上面添加@classmethod
(2).方法的参数为 cls 也可以是其他名称,但是一般默认为cls
(3).cls 指向 类对象
(5).应用场景:当一个方法中只涉及到静态属性的时候可以使用类方法(类方法用来修改类属性)。
(5).使用 可以是 对象名.类方法名。或者是 类名.类方法名

在这里插入图片描述运行结果:
在这里插入图片描述

调用:

(1) 实例方法==>一般只能被实例对象调用;类对象调用实例方法时,需要传个实例对象
(2 )静态方法、类方法==>可以被类对象或实例对象调用。

外形:

(1 )实例方法=>第一个参数-实例对象(PEP8规范-self)
(2 )静态方法==>@staticmethod装饰,无隐含参数,引用类成员必须通过类对象来引用
(3 )类方法==>@classmethod装饰,第一个参数-类对象(PEP8规范-cls)

场景:

(1) 实例方法==>为实例对象单独拥有时
(2 )类方法==>为所有实例对象共有时;需要继承,也可以定义为类方法。
(3 )静态方法==>在类的命名空间,不涉及类成员、实例成员的操作时,始终使用同一块内存,节省空间

3. MRO是什么,描述其查找顺序

MRO即Method Resolution Order(方法解析顺序),即在调用方法时,会对当前类以及所有的基类进行一个搜索,以确定该方法之所在,而这个搜索的顺序就是MRO。
一个类的 MRO 列表就是合并所有父类的 MRO 列表,并遵循以下三条原则:
子类永远在父类前面
如果有多个父类,会根据它们在列表中的顺序被检查
如果对下一个类存在两个合法的选择,选择第一个父类

在这里插入图片描述首先寻找整个图中入度为0的,也就是A,那么A也就成为MRO中的第一个。

然后我们去掉图中的A节点以及与A相关的连线,再寻找入度为0的点,这时有B和C两个节点,我们选择最左边的点即B。选完左边的B点后,再选右边的C点,这样B和C也就跟着进入了MRO序列,现在MRO序列为{A,B,C}。(注意每次层次遍历一定要把那一层选完才能选下一层,不能在没有选C之前跳到选E)

然后去掉B和C以及与它们相关的连线,这时候入度为0的也就是D、E、F了,依次选择,使D、E、F进入MRO序列。

最后也就使得object进入MRO序列。

以上的MRO序列也就是{ABCDEFobject}

4. Mixin是什么,描述其应用场景

Mixin本质上是多继承实现的。
Mixin体现的是一种组合的设计模式。

mixin类扮演父类的角色,包含其他类想要的功能。 然后,一个子类可以继承或简单地重用此功能,但不能作为专业化的手段。通常,mixin将会将所需的功能导出到子类中,而不会创建一个单一的“is a”关系。 这是mixins和继承的概念之间的重要区别,因为子类仍然可以继承父类的所有功能,但是,不必一定应用关于子对象“作为一种”父语义的语义。

Mixin优点
(1)通过允许多个类使用通用功能,但没有多重继承的复杂语义,为多重继承提供了一种机制.
(2)代码可重用性:当程序员希望在不同类之间共享功能时,Mixins很有用。 而不是一遍又一遍地重复相同的代码,通用功能可以简单地分组成一个混合,然后继承到需要它的每个类中。
(3)Mixins允许继承和使用只有父类的所需功能,不一定是父类的所有功能.

但 Mixin 终归不属于语言的语法,为了代码的可读性和可维护性,定义和使用 Mixin 类应该遵循几个原则:
(1)Mixin类种不应该显示的出现_int_初始化方法
(2)Mixin 实现的功能需要是通用的,并且是单一的,比如上例中两个 Mixin 类都适用于大部分子类,每个 Mixin 只实现一种功能,可按需继承。
(3)Mixin 只用于拓展子类的功能,不能影响子类的主要功能,子类也不能依赖 Mixin。比如上例中 Person 继承不同的 Mixin 只是增加了一些功能,并不影响自身的主要功能。如果是依赖关系,则是真正的基类,不应该用 Mixin 命名。
(4)Mixin 类自身不能进行实例化,仅用于被子类继承。

Mixin在python中的应用
在Python中,SocketServer模块]具有UDPServer类和TCPServer类。它们分别作为UDP和TCP套接字服务器的服务器。 另外,还有两个mixin类:ForkingMixIn和ThreadingMixIn。通常,所有新连接都在相同的过程中处理。 通过使用ThreadingMixIn扩展TCPServer。
ThreadingMixIn类向TCP服务器添加功能,以便每个新连接创建一个新的线程。或者,使用ForkingMixIn将导致为每个新连接分叉进程。 显然,创建新线程或分支进程的功能作为独立类不是非常有用的。
mixins提供了替代底层功能,而不影响套接字服务器的功能。
示例:class ThreadingTCPServer(ThreadingMixIn, TCPServer):

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-09-08 11:02:20  更:2021-09-08 11:02:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 2:11:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码