第9次作业

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

 类(class):类是一个抽象的概念,是万事万物的抽象,是一类事物的共同特征的集合。

                        用计算机语言来描述类,是属性和方法的集合。

实例or对象(instance、object):实例是类的具象,是一个实体。

                                                          对于我们每个人这个个体,都是抽象概念人类的不同实体。

类和实例的关系

例如:人类和单独的一个人,单独的一个人是人类的实例,单独的一个人有自己的各种信息如:身高、体重、会的技能和动作等等,这就是实例的属性,而不同的人有不同的属性,所以这些属性不能保存到人类中,因为人类是抽象概念,不能保留每个具体的个体的值。

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

实例方法:是最常见的定义方法的方式。

class Person:
    def showself(self):

        print('普通方法,和自己有关。self={}'.format(self))

在调用showself时必须传入一个实参

类方法:相对实例方法使用较少

class Person:

    @classmethod

    def class_method(cls):

        print('类方法')

        print("{0}'s name = {0.__name__}".format(cls))

        cls.HEIGHT = 170 

在类定义中,使用@classmethod装饰器修饰的方法

在调用时必须至少有一个参数,且第一参数留给了cls,cls指代调用者即类对象自身

cls这个标识符可以是任意合法名称,但是为了易读,请不要修改

通过cls可以直接操作类的属性

通过类、实例都可以非常方便地调用类方法。classmethod装饰器内部将类(或提取实例的类)注入到类方法的第一个参数中。

静态方法:用的极少,偶尔在源码中见到

class Person:

    HEIGHT = 180

    @staticmethod

    def static_method():
        print('静态方法')

        print(Person.HEIGHT)

在类定义中使用@staticmethod装饰器修饰的方法

调用时,不会隐式的传入参数

通过类、实例都可以调用静态方法,不会像普通方法、类方法那样注入参数。

静态方法,只是表明这个方法属于这个名词空间。函数归在一起,方便组织管理。

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

 

MRO有三个搜索算法:

 

经典算法,按照定义从左到右,深度优先策略。2.2版本之前

 

新式类算法,是经典算法的升级,深度优先,重复的只保留最后一个。2.2版本

 

C3算法,在类被创建出来的时候,就计算出一个MRO有序列表。2.3之后支持,Python3唯一

 

支持的算法

 

C3算法解决多继承的二义性

 

经典算法有很大的问题,如果C中有方法覆盖了A的方法,也不会访问到C的方法,因为先访问A的(深度

 

优先)。

 

新式类算法,依然采用了深度优先,解决了重复问题,但是同经典算法一样,没有解决继承的单调性。

 

C3算法,解决了继承的单调性,它阻止创建之前版本产生二义性的代码。求得的MRO本质是为了线性

 

化,且确定了顺序。

 

单调性:假设有A、B、C三个类,C的mro是[C, A, B],那么C的子类的mro中,A、B的顺序一致就是单

 

调的。

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

 

Mixin本质上就是多继承实现的。

 

Mixin体现的是一种组合的设计模式。

 

在面向对象的设计中,一个复杂的类,往往需要很多功能,而这些功能由来自不同的类提供,这就需要

 

很多的类组合在一起。

 

从设计模式的角度来说,多组合,少继承。

 

Mixin类的使用原则

 

Mixin类中不应该显式的出现__init__初始化方法

 

Mixin类仅实现单一功能,通常不能独立工作,因为它是准备混入别的类中的部分功能实现

 

Mixin类是类,也可以继承,其祖先类也应是Mixin类

 

使用时,Mixin类通常在继承列表的第一个位置,例如 class PrintableWord(PrintableMixin,

 

Word): pass

 

Mixin类和装饰器,都可以实现对类的增强,这两种方式都可以使用,看个人喜好。

 

如果还需要继承就得使用Mixin类的方式。

 

posted @   GutonGw  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示