面向对象

1.面向过程和面向对象
面向过程:程序里面有大量函数,每一个环节都是进行函数的调用,从头到尾解决问题。
面向对象:根据需求划分不同的对象,将所有的对象划分成若干个类,在以对象的方式进行 方法或者行为的调用,不是以函数为单位,而是以对象为单位。

面向过程弊端:
(1)只看方法,不能弄清楚方法里面具体做的事情,不清楚角色之间的关系
(2)定义方法时,程序员自己传入参数,所以会造成很多不合理的情况
(3)如果进行升级或者扩展,修改的代码太多。

面向过程:不是先分析是谁,先分析要怎么做
面向对象:先分析是谁,然后再分析怎么做

面向对象三个特征:封装、继承、多态 (容易混淆:抽象,是面向对象过程中的重要思维)
抽象的思维:

一、封装:信息的封装,为了方便调用者调用
1.成员的私有化
成员:实例属性、实例方法、类属性、类方法、静态方法

目的:只能在当前类中使用和访问,不能在类的外部直接访问。

具体的做法:
如果希望一个属性或者一个方法是私有的,那么将名字_ _(开头)**
注意不以两个_ _结尾

如何在类的外部访问私有属性,在类的里面提供get(获取)和set(赋值)方法

封装的优势:提高了代码的扩展性和可维护性。

关于python语言封装:假封装

2.使用property完成成员的私有化
目的:为了方便调用者调用
(1)property函数
(2)property装饰器

(1)property函数
在定义好get方法和set方法之后,将方法进行封装,使得调用者更容易调用的到。

del删除的是属性名,注释是类的注释,基本上只用get和set,后两项不写。都是位置参数,没有的时候后一项如果要写,要用None填充一下

(2)property装饰器

二、继承
使用继承,解决代码中的大量属性、方法的重复。
1.继承的关系
一般与特殊的关系(【特殊类】是【一般类】的子类,【一般类】是【特殊类】的父类)
子类可以继承父类,当继承父类后,就继承了父类下的所有成员(属性、方法)
作用跟定义在自己的类中一样。

2.继承的实现
(1)显示继承

(2)隐式继承
在python中,如果没有写明()继承,就叫隐式继承,只有一种情况,继承object父类
所有的类都会直接或者间接的继承object父类

3.继承的意义
为什么要有子类,继承父类?
当父类有一些属性和方法,允许相关的子类使用的时候,子类可以通过继承的方式直接使用
如果子类有特殊的属性和方法,可以自行定义,甚至扩展,重写
通过继承,实现代码的重要性,可以将公共的部分提取(抽取)出来,放到父类中

解决实际编程问题时:对象—通过抽取—类,类—通过抽取—父类

4.两个重要的内建函数
(1)isInstance(对象,类型)
判断第一个参数指定的对象是否是第二个参数的类型(父类也可以)

(2)issubclass(类型,类型)
第一个参数是否是第二个参数的子类

4.成员的继承
类属性、实例属性、类方法、实例方法、静态方法
(1)类属性、类方法、实例方法、静态方法
关于方法重写
子类继承了父类,父类的成员未必完全适合子类,可以使用重写的方式来自行扩展方法。
规则:如果子类中重写了父类的方法,运行时会按子类的方法进行执行
如果没有重写父类的方法,运行时按照父类的执行

重写后调用父类成员:super().父类的成员 进行访问
super().bybike()继承的是父类中bybike中的全部方法,不能部分继承

(2)实例属性的继承
如果子类中没有定义init方法,就会执行父类中的init方法,进行属性的初始化
如果子类中定义了自己的init方法,则会被子类中的属性进行初始化
如果子类的init中没有继承父类的init,pycharm会提示继承关系是否有问题
如果子类的init方法继承了父类的init,尽量将父类的init放在第一行

(3)私有成员的继承
在python中,子类不建议访问父类中的私有成员
如果一定要访问可以通过 _父类名+私有成员名

(4)多重继承
一个子类可以继承多个父类

多重继承,涉及到继承的顺序,按照从左到右的顺序,对于同名,哪一个父类写在前面,就先继承哪一个父类的方法。

MRO原则:方法调用顺序
如果是单继承,搜索顺序是从子类到父类
如果是多继承,广度优先,一直找到object类为止,参照链接https://www.cnblogs.com/whatisfantasy/p/6046991.html?share_from=com.rae.cnblogs

如果非想继承指定父类的方法,
第一种方法:指定的父类放在第一个位置。

第二种方法:指定父类.方法

如果父类基础上还有其他的父类,继承的顺序一定要保持一致。

三、多态性
定义:对象或者参数在运行或者编译时期的多种形态
python动态强类型语言(鸭子类型语言),在多态上体现得不明显

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值