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内置成员和魔术方法相关内容,下周见~

posted @ 2020-09-21 10:17  Fsky丶  阅读(231)  评论(0)    收藏  举报