这是我参与11月更文挑战的第19天,活动详情查看:2021最后一次更文挑战
前言
在之前我们已经说过了 Python 中内置的主要的几种对象类型,(数,字符串,列表,元组和字典)。而面向对象的核心人物还没出场呢 。那么我们常说的对象是什么类型的呢,其实他的类型就是“类”。继承封装和多态,这是通用的面向对象编程的思想 。
Python 中的继承
继承是为了提高代码的复用性,子类可以通过继承父类来实现父类中的方法,这就是光明正大的偷懒 。举例:
1 | ruby复制代码class Person(): |
以上一个例子,说明了很多问题,首先,定义类是使用class
关键字,定义方法使用def
,默认传入一个参数,其实这个参数不一定非要叫self
但是为了辨识性,我们这样定义,因为它代表的就是当前对象,类似 Java 中的 this 。当然还有我们的继承是通过一个括号+父类来定义的,那为什么 Person 没有写呢,其实这里省略了一个object
不写就表示默认继承 object
超类 。另外,Python 支持多继承,像这样即可,calss Man(Animal,Person)
一个问题需要注意,当多个父类中含有同一个方法时,以后面父类中的为准 。但是,不推荐大家使用多重继承 。
Python 中的封装
封装,理解起来很简单,就是将类中的属性信息隐藏起来,提供公共的方法以备调用,我们将属性进行 ” 私有化 “,在属性的前面加上两个下划线 __name
定义一个假的私有的属性 。看例子:
1 | ruby复制代码class Man(): |
Python 中的多态
还有就是多态了,简单理解,就是有多种状态,常见的就是同一个方法但是执行的效果却不一样,就像是同一个名字人有太多了,而每个人却又不一样,看吧,编程思想也都是来自于日常的生活 。举例 ,都是睡觉 ,但是有的人喜欢躺在床上,有的人喜欢睡在椅子上 。用代码怎么实现呢?看下面
1 | ruby复制代码class People(): |
看吧,同样是睡觉,Roommate 却是睡在椅子上,通过继承的方式实现多态只是实现多态的一种方式而已 。还可以通过其它的方式,比方说这样,方法的参数是超类。
1 | kotlin复制代码# 不同的对象调用同样的方法,结果却一样 。 |
Python 中常用的方法
附加说几个比方常用的方法
1 | python复制代码# 标准模块 random 中包含一个名为 choice 的函数,用于从序列中水机选择一个元素。 |
Python 中的抽象类
关于抽象类:定义了一种规则(抽象方法),继承这个类的子类必须实现抽象类中的抽象方法 。而且,抽象类是不能被实例化的 。
Python 中引入了 abc
模块来实现抽象类的定义,示例:
1 | python复制代码# 下面表示定义了一个 抽象类 Talker , 包含一个抽象方法 talk . |
插播一曲关于面向对象设计的一些思考 。
- 将相关的东西放在一起,如果一个方法要使用全局变量,那就将他作为类的属性和方法
- 不要让对象之间过于亲密 。这就是所谓的解耦和吧 。
- 慎用继承,尤其是多重继承 。
- 保持简单,让方法尽可能的短小精悍 。
1 | 复制代码如何将需求转化为具体的实体类呢 ? 我们可以尝试这样做 。 |
Python 中的异常处理机制
下面简单的说一下 Python 中的异常处理机制 。
抛出异常使用关键字 raise
例如,raise Exception('exception msg !')
但是需要注意的是异常的抛出只能是 Exception 或 Exception 的子类 。
捕获异常:我们可以使用try ... except : ... finally: ...
语句块来处理可能出现异常的代码 。
1 | python复制代码try |
自定义异常类,定义一个类继承 Exception 类即可 。
1 | kotlin复制代码class MyException(Exception): |
本文转载自: 掘金