day21总结

橙三吉。 提交于 2019-12-01 04:54:39

1.组合

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

2.封装

1.什么是封装?

比喻:
    封:比如把一个袋子封装起来
    装:把一个对东西装到袋子里
封装指的是把一堆属性(特征与技能)封装到一个对象中
存数据的目的是为了取,对象可以使用'.'的方式获取属性。
 
比喻:对象就好比一个袋子,袋子里面装一堆属性。

2.为什么要封装?

封装的属性为了方便存取值,可以通个对象,属性的方式获取属性。

3.如何封装?

特征:变量----》数据属性

技能:函数-----》方法属性

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

通过 对象 属性 --- 属性值

3.访问限制机制

1.生么是访问限制机制?

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

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

__ name = 'tank'

2.访问限制机制的目的?

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

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

注意: 在python中,不会强制限制属性的访问,类内部__开头的属性,只是做了一种变形.
若想直接访问, 调用变形后的名字即可.
class Foo:
    __name = 'tank'  # ---> _类名__属性名
    
    
列:
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()

4.property:

​ 1.什么是property
​ python内置的装饰器, 主要是给类内部的方法使用.

2.为什么要用property
    使用它的目的,是将类内部的方法 (def 方法名()) 变成了 (def 方法).
    在对象调用某个方法时,将对象.方法()变成对象.方法(看起来想一个普通的数据属性)

3.如何使用property
    @property

5.多态:

​ 1.什么是多态?
​ 多态指的是同一种事物的多种形态.

2.多态的目的:
    多态也称之为多态性, 在程序中继承就是多态的表现形式.
    多态的目的是为了, 让多种不同类型的对象, 在使用相同功能的情况下,调用同一个名字的方法名.
    父类: 定义一套统一的标准.
    子类: 遵循父类统一的标准.
    多态的最终目的: 统一子类编写的规范, 为了让使用者更方便调用相同功能的方法.

3.如何实现:
    - 继承

注意: 在python中,不会强制要求子类必须遵循父类的一套标准,所以出现了抽象类.
class Animal:
    # 吃
    def eat(self):
        pass

    # 喝
    def drink(self):
        pass

    # 叫
    def speak(self):
        pass


# 猪
class Pig(Animal):

    # 吃
    def eat(self):
        print('猪在吃饭')
        pass

    # 喝
    def drink(self):
        pass

    def speak(self):
        print('哼哼哼~~~')


# 猫
class Cat:
    # 吃
    def eat(self):
        print('猫在吃饭')
        pass

    # 喝
    def drink(self):
        pass

    def speak(self):
        print('喵喵喵~~')


# 狗
class Dog:
    # 吃
    def eat(self):
        print('狗在吃饭')
        pass

    # 喝
    def drink(self):
        pass

    def speak(self):
        print('汪汪汪~~~')


# 正确教材
pig = Pig()
cat = Cat()
dog = Dog()

pig.speak()
cat.speak()
dog.speak()

6.抽象类(了解):

​ 1.是什么?
​ abc模块 abstract_class

2.使用的目的?
    强制子类必须遵循父类的一套标准.

3.如何使用
    import abc

列:
import abc

class Animal(metaclass=abc.ABCMeta):
    # 吃
    @abc.abstractmethod
    def eat(self):
        pass
    # 喝
    @abc.abstractmethod
    def drink(self):
        pass
    # 叫
    @abc.abstractmethod
    def speak(self):
        pass

# 猪
class Pig(Animal):
    # 吃
    def eat(self):
        print('猪在吃饭')
        pass

    # 喝
    def drink(self):
        pass

    def speak(self):
        print('哼哼哼~~~')

    # 派生
    def run(self):
        pass

pig = Pig()

7.鸭子类型:

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

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

- 继承:
    耦合性太高,程序的可扩展性差

- 鸭子类型:
    耦合度低,程序的可扩展性强
    
列:
# 猪
class Pig:
    # 吃
    def eat(self):
        print('猪在吃饭')
        pass
    # 喝
    def drink(self):
        pass
    def speak(self):
        print('哼哼哼~~~')


# 猫
class Cat:
    # 吃
    def eat(self):
        print('猫在吃饭')
        pass
    # 喝
    def drink(self):
        pass
    def speak(self):
        print('喵喵喵~~')

# 狗
class Dog:
    # 吃
    def eat(self):
        print('狗在吃饭')
        pass
    # 喝
    def drink(self):
        pass
    def speak(self):
        print('汪汪汪~~~')

8.多态旋技操作

代码演示

# # 猫
# class Cat:
#     # 吃
#     def eat(self):
#         print('猫在吃饭')
#         pass
#     # 喝
#     def drink(self):
#         pass
#     def speak(self):
#         print('喵喵喵~~')
#
# # 狗
# class Dog:
#     # 吃
#     def eat(self):
#         print('狗在吃饭')
#         pass
#     # 喝
#     def drink(self):
#         pass
#     def speak(self):
#         print('汪汪汪~~~')
#
# dog = Dog()
# cat = Cat()
# pig = Pig()
#
# def BARK(animal):
#     animal.speak()

# BARK(dog)
# BARK(cat)
# BARK(pig)

汪汪汪~~~
喵喵喵~~
哼哼哼~~~
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!