组合、封装、多态

组合

1、什么是组合

​ 组合指的是一个对象中的属性是另一个对象

2、作用:

​ 减少代码冗余

3、如何使用

class People:
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex

class Teacher(People):
    def __init__(self, name, age, sex):
        super().__init__(name, age, sex)

class Student(People):
    def __init__(self, name, age, sex):
        super().__init__(name, age, sex)


# 日期类
class Date:
    def __init__(self, year, month, day):
        self.year = year
        self.month = month
        self.day = day

    def tell_birth(self):
        print(f'''
        === 出生年月日 ===
        年: {self.year}
        月: {self.month}
        日: {self.day}
        ''')


tea1 = Teacher('tank', 17, 'male')
stu1 = Student('frank', 18, 'male')
date_obj1 = Date(1990, 1, 1)
date_obj2 = Date(2001, 1, 1)
# date_obj.tell_birth()
tea1.date = date_obj1  # 将date对象赋值到tea1对象的date属性中
tea1.date.tell_birth()
stu1.date = date_obj2  # 将date对象赋值到tea1对象的date属性中
stu1.date.tell_birth()

总结:

​ 继承:
​ 类与类的关系,子类与父类是从属关系
​ 组合:
​ 对象与对象的关系,一个对象拥有另一个对象

封装

1、什么是封装

​ 封:比如把一个袋子封起来
​ 装:把东西装到袋子中

​ 封装指的是把一堆属性(特征与技能)封装到一个对象中
​ 存数据的目的是为了取,对象可以'.'的方式获取属性

封装,就是把一堆属性装到对象中

2、为什么要封装

​ 封装的目的是为了方便存取,可以通过对象.属性的方式获取属性

3、如何封装

​ 特征:变量-->数据属性
​ 技能:函数-->方法属性

​ 在类内部,定义一堆属性(特征与技能)
​ 通过 对象.属性 = 属性值

封装是面向对象编程的精髓

访问限制机制:

1、什么是访问限制机制

​ 在类内部定义的,凡是以__开头的数据属性与方法属性,都会被python隐藏起来
​ 外部不能直接访问内部的属性

2、访问限制机制的目的

​ 把一堆隐私的属性与不能被外部直接访问的属性,可以隐藏起来,不被外部直接调用
​ 好处:
​ 对重要数据获取的逻辑更加严谨,从而保证了数据的安全。

​ 接口:隐私属性可以通过封装一个接口,在接口内部做业务逻辑的处理,在把数据返回给调用者

​ 注意:在python中不会禁止访问数据,类内部__ ,只是做了一个变形,

property:

1、什么是property

​ python 内置的装饰器,主要是给类内部的方法使用的,

2、为什么要使用property

​ 使用它的目的是,将内部的方法(def方法())变成了(def 方法)
​ 调用某个方法时,将 对象.方法() 变成 对象.方法(使之看起来像数据属性)

3、如何使用property

​ @property

​ 不能对被装饰过的方法属性进行修改
​ 若真要修改,可以如下操作

多态:

1、什么是多态

​ 同一种事物的多种形态。

2、多态的作用

多态也称为多态性,在程序中继承就是多态的表现形式
可以让多种不同类型的对象,在使用相同方法的情况下,调用同一个名字的方法名

父类:定义一套统一的标准
子类:遵循父类统一的标准
多态的最终目的:统一标准,统一子类编写的规范

3、如何实现

​ - 继承

注意:在python中,不会强制要求子类必须遵循父类的一套标准,所以发明了抽象类

抽象类:

1、什么是抽象类

​ abc模块 abstract_class

2、使用的目的?

强制子类必须遵循父类的一套标准.

3、如何使用

​ import abc

鸭子类型:

1、什么是鸭子类型

在不知道当前对象是何物的情况下,你长得像鸭子,那么你就是鸭子类型

在python中不推荐使用抽象类去强制限制子类的定义,但是推荐类都遵循鸭子类型

继承和鸭子类型的区别:
继 承:耦合度高,扩展性差
鸭子类型:耦合度低, 扩展性强

posted @ 2019-10-11 22:13  AllenCH  阅读(137)  评论(0编辑  收藏  举报