• 6月6日 python复习 面向对象


    1、面向对象编程

    1、面向过程编程
    核心是”过程“二字,过程指的是解决问题的步骤,即先干什么再干什么
    基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式

    优点:复杂的问题流程化、进而简单化
    缺点:可扩展性差

    2、面向对象
    核心”对象“二字,对象指的是特征与技能的结合体,
    基于该思想编写程序就好比在创造一个世界,你就是这个世界的上帝,是一种
    上帝式的思维方式

    优点:可扩展性强
    缺点:编程的复杂度高于面向过程

    2、对象与类

    1、类
        对象是特征与技能的结合体,那类就是一系列对象相同的特征与技能的结合体
    
    2、在现实世界中:一定先有对象,后来随着人类文明的发展总结出的类
                对象是具体存在的,而类只是一种抽象概念
    
    3、在程序中,务必保证:先定义类,后调用类来产生对象

    3.类的定义 

    • 在定义类的时候,类内的代码就已经执行了
    • 在定义类时需要在类内定义一个叫__init__的函数,该函数在调用时才会执行
    • self是位置参数,用于在调用函数时接受传入的第一个参数,该参数为调用此方法的object本身
    复制代码
    #类的实例化==》对象
    
    #1. 若类内部没有设置__init__方法,则生成对象时自身的特殊属性加上用如#下方法
    class1=ClassName()
    class1.name='enon'
    class1.age=18
    
    #2.若类内部有__init__方法
    class1=ClassName('enon',18)
    复制代码

      调用类时发生了哪些事:

    1、首先会产生一个空对象stu1
    2、会自动触发类内部的__init__函数
    3、然后将空对象stu1连同调用类时括号内的参数组成(stu1,"egon",18),将这3个参数一起传给__init__函数

    4、对象

    1.  类的实例化:调用类产生对象的过程称为类的实例化,实例化的结果是一个对象,或称为一个实例
    2.   对象属性的查找顺序:先找对象自己的名称空间----》类的名称空间
    3.   类的数据属性:是给对象用的,而且直接共享给所有对象用的,内存地址都一样
    4.      类的函数属性:也是给对象用,但是绑定给对象用的,绑定到不同的对象就是不同的 
    5.   绑定方法,内存地址都不一样,但其实只想都是同一个功能
    6.      绑定方法的特殊之处:

                1、 绑定给谁就应该由谁来调用, 

            2、谁来调用就会把谁当做第一个参数传入

        7.     一切皆对象:在python3中统一了类与类型的概念,类即类型

    5、 继承

    1. 什么是继承:

           继承是一种新建类的方式,在python中支持一个子类继承多个父类

           新建类称为子类或派生类

           父类可以称之为基类或者超类

           子类会遗传父类的属性

           2. 为什么继承

          减少代码冗余

      

    3.  super()调用(严格依赖于继承)

        super()的返回值是一个特殊的对象,该对象专门用来调用父类中的属性

    复制代码
    class OldboyTeacher(OldboyPeople):
        #            tea1,'egon', 18, 'male', 9, 3.1
        def __init__(self, name, age, sex, level, salary):
            OldboyPeople.__init__(self,name, age, sex)     #调用父类方法
            # super(OldboyTeacher,self).__init__(name,age,sex)  在python2中调用时用这种写法
    
            self.level = level
            self.salary = salary
    
        def tell_info(self):
            # OldboyPeople.tell_info(self)
            super().tell_info()
            print("""
            等级:%s
            薪资:%s
            """ %(self.level,self.salary))
    复制代码

    super()严格依赖继承    



    6、新式类与经典类

    1、新式类

    继承object的类,以及该类的子类,都是新式类

    在python3中,如果一个类没有指定继承的父类,默认就继承object
    所以说python3中所有的类都是新式类

    2、经典类  (只有在python2才区分经典类与新式类):

    没有继承object的类,以及该类的子类,都是经典类   

         区别: 在菱形继承的背景下,经典类和新式类才有区别。非菱形继承时,是一样的。但是当菱形继承时,新式类会采用广度优先,经典类深度优先

         深度优先:按照从左往右的顺序,每一条分支走到底,再转入下一条分支

         广度优先:按照从左往右的顺序,忽略菱形最顶上的父类,将除该父类之外的所有类进行深度优先遍历,最后再查找该父类

           多继承的类便利顺序:一个对象继承多个类,按照定义顺序,从左到右,深度便利

        

     

           经典类遍历结果:ABEGCFD

           新式类便利结果:ABECFDG 



    7、组合    

       解决类与类之间代码冗余问题有两种解决方案:1、继承 2、组合

     1、继承:描述的是类与类之间,什么是什么的关系

     2、组合:描述的是类与类之间的关系,是一种什么有什么关系
     一个类产生的对象,该对象拥有一个属性,这个属性的值是来自于另外一个类的对象

    8、封装  

    1、什么是封装

    装就是把一堆属性存起来,封的概念就把这些属性给隐藏起来
    强调:封装单从字面意思去看等同于隐藏,但其实封装绝对不是单纯意义的隐藏

    2、为什么要用封装

         封装数据属性的目的:把数据属性封装起来,然后需要开辟接口给类外部的使用者使用,好处是我们可以在接口之上添加控制逻辑,从而严格空间访问者对属性的操作、

           封装函数属性的目的:为了隔离复杂度  

       封装的终极奥义:明确地区分内外,对外是隐藏的,对内是开放的

    9、多态    

    1、 什么是多态
          多态指的是同一种事物多种形态  

    2、为什要用多态
    用基类创建一套统一的规则,强制子类去遵循(使用抽象类实现),这样便可以
    在不用考虑对象具体类型的前提下而直接使用对象下的方法

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

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

            鸭子类型:

         长得像什么,就被当作是什么

  • 相关阅读:
    复制工程或修改工程名字后找不到第三方库解决方法
    描述文件不匹配的解决方法
    JSON Code3840错误
    swift介绍和语言概述
    swift
    新入行程序员应知的十个秘密
    signal SIGABRT
    属性,属性赋值及其内存管理
    HTTP网络请求
    使用类目删除可变字符串中重复字母的一个算法
  • 原文地址:https://www.cnblogs.com/95lyj/p/9147140.html
Copyright © 2020-2023  润新知