python学习-第十四周:OOP的三大特征
python学习-第十四周:OOP的三大特征
面向对象程序设计的特点
面向对象程序设计具有三大基本特征:封装、继承和多态。
封装
封装就是使用特殊的语法,对成员属性和成员方法进行包装,达到保护和隐藏的目的
被封装的成员主要是供类的内部使用
被特殊语法封装的成员,会有不同的访问的权限
封装的级别
成员 ==> 公有的 :默认定义的成员
_成员 ==> 受保护的 :定义时在成员名称前面加一个下划线
__成员 ==> 私有的 :定义时在成员名称前面加两个下划线
成员的访问权限:
公有的 受保护的 私有的
在类的内部 OK OK OK
在类的外部 OK No(python可以) No
继承
什么是继承
举例:
矩形、菱形、平行四边形和梯形都属于四边形
四边形的属性和行为:有四个边
平行四边形的属性和行为:四个边,对边平行且相等
解读:
四边形类比作父类,平行四边形类就是继承了四边形类产生的子类,四边形的属性和行为传承给了平行四边形
在面向对象中,一个类去继承父类,那么这个类就拥有了父类中的所有成员(除了私有成员)
- 被其它类继承的类,这个类称为 父类 也叫做 基类 或者 超类
- 继承其它类的类,这个类称为 子类,也叫做 派生类
继承是实现重复利用的重要手段,子类通过继承复用了父类的属性和方法的同时,又添加了子类特有的属性和方法
继承语法格式
class 父类():
pass
class 子类(父类):
pass
继承的特征
- 在不指定继承的父类时,所有类都继承自object类(系统提供) 了解
- 子类继承了父类后,就拥有了父类中的所有成员包括魔术方法(除了私有成员)
- 子类继承父类后,并不会把父类的成员复制给子类,而去引用
- 子类继承父类后可以重写父类中的方法,叫做 重写
- 子类重写父类的方法,依然可以使用
super().父类方法名()的方式调用父类的方法 - 子类中如果定义了父类中不存在的方法,称为对父类的扩展
- 一个父类可以被多个子类继承,还可以存在 链式继承 。
- 链式继承:A类继承了B类,B类继承了C类,C类继承了D类。。。
单继承和多继承
单继承:一个类只能继承一个父类的方式。
class 父类():
pass
class 子类(父类):
pass
多继承:一个类去继承多个父类的方式。
class 父亲():
pass
class 母亲():
pass
class 子类(父亲,母亲):
pass
菱形继承(钻石继承)
A
B C
D
# D类去继承了B类和C类,然后B类和C类又分别继承了A类,这种继承关系称为 菱形继承
# super()调用顺序:D --> B --> C --> A
多态
对于同一个方法,由于调用的对象不同,产生了不同形态的结果
比如创建一个螺丝类(属性:粗细,螺纹),再创建两个类:长螺丝类,短螺丝类,它们都继承了螺丝类。
长螺丝类和短螺丝类不仅具有相同的特征(粗细,螺纹)还具有独特的特征(长度)。
长螺丝可用来固定支架,短螺丝可用来固定家具,实现了不同的效果。
示例:
# 多态 普通版本
# 对于同一个方法,由于调用的对象不同(或者传入的对象不同),最终实现了不同的结果
# 定义电脑类
class Computer():
# 在电脑类中定义一个 sub 的规范的接口 方法
def usb(self,obj):
obj.start()
# 定义鼠标类
class Mouse():
def start(self):
print('鼠标启动成功')
# 定义键盘类
class KeyBord():
def start(self):
print('键盘启动成功')
# 定义 U盘 类
class Udisk():
def start(self):
print('U盘启动成功')
# 实例化对象
c = Computer() # 电脑对象
m = Mouse() # 鼠标对象
k = KeyBord() # 键盘对象
u = Udisk() # u盘对象
# 把不同的设备插入到电脑的usb的接口中
c.usb(m)
c.usb(k)
c.usb(u)
OOP特征部分归纳完毕,下周总结OOP内置成员和魔术方法相关内容,下周见~

浙公网安备 33010602011771号