第13节 - 面向对象三(继承多态类与实例的属性和方法)

tech2022-08-18  144

第13节 - 面向对象三(继承/多态/类与实例的属性和方法)

一、继承二、方法的重写三、super()方法四、多重继承五、多态5.1对象之间没有继承关系5.2对象之间有继承关系 六、属性和方法6.1类属性:6.2实例属性:6.3实例方法:6.4类方法:6.5静态方法:

一、继承

继承就是让类与类之间产生关系,提高了代码的复用性 通过继承我们可以使一个类获取到其他类中的属性和方法 在定义类的时候,可以在类名后的括号里面指定当前类的父类(超类/基类) 继承是可以传递的,即由一个子类传递到子类的子类 继承是面向对象的三大特征之一(封装、继承、多态) 如上图:所有类的父类都是object

二、方法的重写

如果在子类中有和父类同名的方法,则通过子类实例去调用方法时,会调用子类的方法而不是父类的方法,这个特点我们称之为方法的重写(覆盖) 当我们调用一个对象的方法时: • 会优先去当前对象中寻找是否具有该方法,如果有则直接调用 • 如果没有,则去当前对象的父类中寻找,如果父类中有则直接调用父类中的方法 • 如果没有,则去父类中的父类寻找,以此类推,直到找到object,如果依然没有找到就报错 如上图,属性全部被重写

三、super()方法

•super()可以获取当前类的父类 •并且通过super()返回对象调用父类方法时,不需要传递self (1)用父类名进行继承 (2)用super()方法进行继承 子类可全部继承父类的属性和方法,又可全部重写

super()可以用来获取当前类的父类,但定义子类的括号中不能用此方法 如上图:当前状态下还未知子类的父类是谁

在开发中,父类.方法和super().方法不能混用,否则会形成死循环

四、多重继承

(1)继承的传递 如上图,通过xx.__bases__方法可以获取其父类

(2)多重继承 如上图: 多重继承,会使子类同时拥有多个父类,并且会获取到所有父类中的方法 在开发中没有特殊情况,应该尽量避免使用多重继承。因为多重继承会让我们的代码更加复杂 多个父类出现了同名的方法,依照书写顺序,会先找第一个父类,如果没有则去第二个父类中找…

(3) 解耦合: 我们不希望不同部分的代码产生太多的牵连(一部分代码出现问题不至于全局出现瘫痪) 解耦合作用: 1.提高问题的解决效率 2.提高问题的解决概率 3.提供问题的解决速度 4.降低将来爆发隐患的可能性

五、多态

多态是面向对象的三大特性之一 一个对象有多重表现形式去呈现它 多态的作用:python的多态是指具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容的函数

Python中多态的特点 (1)只关心对象的实例方法是否同名,不关心对象所属的类型; (2)对象所属的类之间,继承关系可有可无; (3)多态的好处可以增加代码的外部调用灵活度,让代码更加通用,兼容性比较强; (4)多态是调用方法的技巧,不会影响到类的内部设计。

5.1对象之间没有继承关系

5.2对象之间有继承关系

六、属性和方法

6.1类属性:

类属性 :直接定义在类中的属性。类属性可以通过类和该类的实例来访问, 不能通过实例对象来修改(实例对属性赋值相当于新添加了一个实例属性),只能通过类对象来修改

6.2实例属性:

#实例属性:通过实例对象来添加的属性;实例属性只能通过实例对象来访问,不能通过类对象来访问

6.3实例方法:

以self为第一个参数的方法都是实例方法 通过实例对象调用时,会自动传递当前对象作为self传入 通过类对象调用时,不会自动传递self,需传递实例对象进入才可以(可通过类对象访问,但要传参)

6.4类方法:

在类内部通过@classmethod来修饰的方法属于类方法 类方法可以通过类对象调用,也可以通过实例对象调用 类方法第一个参数默认是cls,cls就相当于是当前的类对象 注意:修饰器@classmethod只对它下面的第一个类方法起作用,如果定义多个类方法需要添加多个修饰器

6.5静态方法:

用@staticmenthod来修饰的方法就是静态方法 不需要指定任何的默认参数,静态方法可以被类对象和实例对象调用 静态方法和类本身无关,就是一个功能函数

最新回复(0)