zoukankan      html  css  js  c++  java
  • day21

    组合

    1. 什么是组合?

      ​ 组合指的是一个对象中的属性,该属性的值是指向另外一个类的对象

    2. 为什么要使用组合?

      ​ 组合和继承一样,是用来解决类与类之间代码冗余的问题

    3. 如何使用组合?

    • 需求:假如我们需要给学生添加课程属性,但是又不是所有的老男孩学生一进学校就有课程属性,课程属性是学生来老男孩后选出来的,也就是说课程需要后期学生添加进去的

    • 实现思路:如果我们直接在学生中添加课程属性,那么学生刚被定义就需要添加课程属性,这就不符合我们的

      要求,因此我们可以使用组合能让学生未来添加课程属性

    封装

    1. 什么是封装?

      比喻:

      ​ 封:比如把一个袋子封起来

      ​ 装:比如把一堆小猫小狗装到袋子里

      封装指的是把一堆属性(特征与技能)封装到一个对象中

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

      你钱包有多少钱(数据的封装)

      你的性取向(数据的封装)

      比喻:对象就好比一个袋子,袋子里面装一堆属性

    2. 为什么要封装?

      封装数据的主要原因是:保护隐私

      封装方法的主要原因是:隔离复杂度(快门就是傻瓜相机为傻瓜们提供的方法,该方法将内部复杂的照相功能都隐藏起来了)

    3. 如何封装?

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

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

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

      通过 对象.属性 = 属性值

    ​ 提示:在编程语言中,对外提示的接口(接口可以理解为一个入口),就是函数,称为接口函数,这与接口的概念还不一样,接口代表一组接口函数的集合体

    访问限制机制

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

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

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

      比如:__name='tank',这些都是私有的,原则上是供内部调用的

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

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

      好处:

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

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

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

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

      class Foo:
      	__name = 'tank'  #--->_类名__属性名
      

    property

    1. 什么是property?

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

    2. 为什么要用property?

      使用它的目的,是将类内部的方法(def方法名())变成了(def 方法)

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

    3. 如何使用property?

      @property

      注意:不能对被装饰过的方法属性修改

    多态与多态性

    • 多态
    1. 什么是多态:

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

      序列数据类型有多种形态:列表,字典,集合,文件

      动物有多种形态:人,狗,猪

    2. 多态的目的:

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

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

      父类:定义一套统一的标准

      子类:遵循父类统一的标准

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

    3. 如何实现:

      -继承

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

    • 多态性

      注意:多态与多态性是两种概念

      多态是指具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容的函数。

      在面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息,不同的对象在接收时会产生的行为(即方法)。也就是说,每个对象可以使用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。

      多态性是一个接口(函数func)的多种实现。如(obj.run)**

      多态性的好处:

      增加了程序的灵活性:以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如(func(animal))

      增加了程序的可扩展性:通过继承Animal类创建了一个新的类,使用者无需更改自己的代码,还是用func(animal)去调用

    多态:同一种事情的多种形态,动物分为人类,猪类(在定义角度)

    多态性:一种调用方式,不同的执行效果(多态性)

    抽象类

    1. 什么是抽象类

      ​ 抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化

    2. 为什么要有抽象类

      ​ 如果说类是从一堆对象中抽取相同的内容而来的,那么抽象类是从一堆中抽取相同的内容而来的,内容包括数据属性和函数属性

    3. 如何使用

      import abc

    鸭子类型

    什么是鸭子类型?

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

    在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('汪汪汪~~~')
    
    dog = Dog()
    cat = Cat()
    pig = Pig()
    
    def BARK(animal):
        animal.speak()
    
    BARK(dog)
    BARK(cat)
    BARK(pig)
    
    运行结果:
    汪汪汪~~~
    喵喵喵~~
    哼哼哼~~~
    
    str1 = '1234'
    list1 = [1,2,3]
    
    print(str1.__len__())
    print(list1.__len__())
    
    
    def LEN(d):
        return d.__len__()
    print(LEN(str1))
    print(LEN(list1))
    
    print(len(str1))
    print(len(list1))
    
    运行结果:
    4
    3
    4
    3
    4
    3
    
  • 相关阅读:
    7进程、线程、协程
    架构
    5oop面向对象编程
    2流程控制
    redis
    1HTML
    3.函数、递归、模块
    2、变量、数据类型、运算符、流程控制
    一个小公司的性能测试工程师应该如何开展工作
    程序代码调优工具perf学习记录
  • 原文地址:https://www.cnblogs.com/gfhh/p/11655382.html
Copyright © 2011-2022 走看看