python3之封装,继承,多态

封装

1、 什么是封装?

封装,是面向对象的一个非常重要的特征,主要体现的是对数据的保护。

2、 为什么要有封装?

类比生活,每个对象自己的属性数据都可能是保密的,不能允许别人直接访问的!软件要还原生活场景(目的是为了更加准确的解决问题),就需要将这样的特性的体现出来,开发的软件才是更加健壮的。
在这里插入图片描述

3、 封装的步骤

① 所有属性私有化
**私有化,就是让属性变成当前对象自己的,**不允许别人(类型/对象外其他的类型/对象)直接访问。
在这里插入图片描述
语法规则:变量使用两个下划线开头

② 提供访问私有属性的方法
在这里插入图片描述
set方法是用来给属性赋值的。
get方法是用来给属性取值的。

③ 数据是怎么保护的?
在这里插入图片描述

继承

1、 什么是继承

继承,就是面向对象编程中的一个非常重要的特征,主要体现了类型中代码的复用性。
在这里插入图片描述

2、 为什么要继承?

类似生活中,通过继承关系,可以子承父业,在一个人刚出生的就已经继承了大量的资源,这些从父辈继承的资源可以直接重复利用,提高了资源的复用性。

代码中,通过继承语法,可以让两个或者多个类型之间,产生继承关系,儿子类型就可以继承父亲类型的属性和方法,父亲类型中的属性和方法就得到了重复使用的目的。

基本语法

父类声明:

class Father:
    """父亲类型"""

    def __init__(self, name, gender, age):
        self.name = name
        self.gender = gender
        self.age = age

    def sleep(self):
        print("睡觉时间到了,准备午休..")

    def study(self):
        print("充电时间到了,准备学习..")

子类声明:(子类继承父类,是通过类型声明后面的括号中,编写了要继承父类的名称,完成继承关系的建立。)

class Son(Father):
    """儿子类型:继承父亲类型"""
    pass

子类重复使用父类的代码:

tom = Son("汤姆", "男", 18)
print(tom.name, tom.age, tom.gender)
tom.study()
tom.sleep()

深入继承关系案例:

class Animal:
    """动物类型"""

    def __init__(self, nickname, amtype):
        self.nickname = nickname
        self.amtype = amtype

    def move(self):
        print("某个动物在运动中...")


class Beast(Animal):
    """地上跑的"""

    def __init__(self, nickname, amtype, blood):
        # 子类如果一旦编写__init__()方法
        # 就必须显式的调用父类的__init__()方法初始化父类数据
        # Animal.__init__(nickname, amtype)
        # super(Beast, self).__init__(nickname, amtype)
        # ① 复用父类的代码
        super().__init__(nickname, amtype)
        # ② 子类自己的代码
        self.blood = blood


class Bird(Animal):
    """天上飞的"""

    def __init__(self, nickname, amtype, attact):
        # ① 复用父类的代码
        super().__init__(nickname, amtype)
        # ② 子类独有的代码
        self.attact = attact

class Fish(Animal):
    """水里游的"""
    pass


cat = Beast("汤姆猫", "走兽", 2000)
beita = Bird("开飞机的贝塔", "飞禽", 100)
xiaolu = Fish("水里的美人鱼", "游鱼")

print(cat.nickname, cat.amtype, cat.blood)
print(beita.nickname, beita.amtype, beita.attact)
cat.move()
beita.move()
xiaolu.move()

方法重载的扩展

方法重载,其实还原了生活中新事物对比老事物功能在进化,功能更加强大这样的一种扩展特性。[面向对象的扩展性非常好,方法重载也是一种体现]

方法重载案例:

class Animal:
    """动物类型"""
    def __init__(self, nickname):
        self.nickname = nickname

    def move(self):
        print(f"{self.nickname}在移动中..")


class Beast(Animal):
    """走兽"""

    def move(self):
        print(f"{self.nickname}在快速的奔跑中..")


class Bird(Animal):
    """飞禽"""
    def move(self):
        print(f"{self.nickname}在愉快的飞行中..")


class Fish:
    """游鱼"""
    def __init__(self, nickname):
        self.nickname = nickname

    def swimming(self):
        """移动的方法"""
        print("飞快的游走中...")


cat = Beast("汤姆猫")
shuke = Bird("舒克的飞机")
# 调用的是同一个方法,但是执行的是不同的结果
cat.move()  # 汤姆猫在快速的奔跑中..
shuke.move()  # 舒克的飞机在愉快的飞行中..

xiaolu = Fish("小鹿")
xiaolu.swimming()
'''
通过方法重写
① 理解继承的代码的重用型
② 继承关系中,对于子类中的代码有了一定的约束性
③ 方法覆盖,体现了一种运行时状态改变-体现了多态
    如果子类没有重写父类的方法,就直接执行父类的方法
    如果子类重写了父类的方法,就执行子类重写后的方法
'''

多继承

生活场景中,我们个人可能是公司的职员,在自己家是父亲的儿子,是妻子的老公,是孩子的父亲。一个人[对象]同时会在生活中的不同场景下扮演不同的角色,在代码中怎么体现?

(1) 多继承理论结构

在这里插入图片描述

(2) 多继承基础语法

多继承的基本语法,是将继承的类型依次(有顺序)声明在类型后面的括号中,描述当前类型继承的所有类型,当前类型就会拥有所有继承类型的公共的属性和公共的方法。
在这里插入图片描述
使用继承过来的数据:
在这里插入图片描述

多态

1、 什么是多态?
多态,是面向对象程序开发的一个重要的特征,没有固定的语法,主要体现为程序设计时考虑到的各种运行情况,以及运行过程中表现的多种状态的转换。

2、 通过案例看多态

class WebSite:
    """网站"""

    def register(self, strategy):
        """
        注册的方法:结构
        :param strategy 具体的策略,告诉网站结构使用什么方式进行注册
        """
        print("开始注册用户")
        strategy.send("ABCD")
        input("验证码已发送,请查收后输入,按任意键(输入成功)")
        print("注册成功")


class Device:
    """算法 父类:规范子类中出现的方法"""
    def send(self, code):
        print("发送验证码", code)


class Phone(Device):
    """手机注册策略"""
    def send(self, code):
        print("通过手机发送验证码.", code)


class Email(Device):
    """邮箱注册策略"""
    def send(self, code):
        print("通过邮箱发送验证码.", code)


# 注册方式:策略
# device = Email()
device = Phone()

# 用户开始注册
ws = WebSite()
# 发起注册:将策略算法交给软件结构进行处理
ws.register(device)

用户[网站]注册的案例:设计模式中的行为模式:策略模式。
在这里插入图片描述
在这里插入图片描述

发布了21 篇原创文章 · 获赞 0 · 访问量 216

猜你喜欢

转载自blog.csdn.net/raojiaxing_/article/details/105043877