day32

组合

对象与对象的关系,一种什么有什么的关系,一个对象拥有另一个对象

组合的目的

和继承一样,为了减少代码冗余

组合案例

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')
date_obj = Date(2002, 1, 1)
# date_obj.tell_birth()
# 将date对象赋值到tea1对象的date属性中
tea1.date = date_obj
tea1.date.tell_birth()

封装

封装就是把一队属性(特征与技能)封装到一个对象中

存数据的目的是为了取,对象可以“.”的方式获取属性

封装的目的

为了方便存取,可以通过 对象 . 属性的方式获取属性

如何封装

在类内部,定义一队属性(特征与技能)

通过 对象 . 属性 = 属性值

访问限制机制

在类内部定义,凡是以__开头的数据属性与方法属性

都会被python内部隐藏起来,让外部不能“直接”访问类内部的__开头的属性

比如: __name = 'tank'

访问限制机制的目的

一堆隐私的属性与不能被外部轻易访问的属性,可以隐藏起来,不被直接调用

好处:

对重要数据获取的逻辑更加严谨,进而保证了数据的安全。

接口:

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

注意:

在python中,不会强制限制属性的访问,类内部__开头的属性, 只是做了变形

若想直接访问,调用变形后的名字即可

案例

# ATM
class ATM:
    # 1.插卡
    def __insert_card(self):
        print('插卡')
        pass

    # 2.输入密码
    def __input_pwd(self):
        print('密码验证')
        pass

    # 3.输入取款金额
    def __input_money(self):
        print('输入金额')
        pass

    # 4.开始吐钱
    def __get_money(self):
        print('执行吐钱')
        pass

    # 5.打印账单
    def __print_flow(self):
        print('打印账单')
        pass

    # 取钱直接接口
    def withdraw(self):
        self.__insert_card()
        self.__input_pwd()
        self.__input_money()
        self.__get_money()
        self.__print_flow()
        print('取款程序执行完毕!')


atm = ATM()
atm.withdraw()

property

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

property的目的

将类内部的方法(def 方法名()) 变成了(def 方法.)

在对象调用某个方法时,将对象.方法()变成对象.方法(看起来像一个普通的数据属性)

如何使用

@property

多态

多态指的是同一种事物的多种形态

多态的目的

多态也称之为多态性,在程序中继承就是多态的表现形式。

多态的目的就是为了,让多种不同类型的对象,在使用相同功能的情况下,调用同一个名字的方法名

最终目的:统一子类编写的规范,为了让使用者更方便调用相同功能的方法

如何实现

通过继承

抽象性(了解)

abc模块 abstrac_class

目的

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

如何使用

import abc

鸭子类型

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

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

区别

——继承:

耦合性太高,程序的可扩展性差

——鸭子类型:

耦合度低,程序的可扩展性强

posted @ 2019-10-11 15:53  Isayama  阅读(143)  评论(0编辑  收藏  举报