Python基础

六、面向对象

  1.定义

   面向对象编程 —— Object Oriented Programming

      面向过程 和 面向对象,是两种不同的 编程方式

  2.过程和函数

   过程:是早期的一个编程概念,类似于函数,只能执行,但是没有返回值

   函数:不仅能执行,还可以返回结果

  3.面向过程

   a.怎么做

    1)把完成某一个需求的所有步骤从头到尾逐步实现

    2)根据开发需求,将某些功能独立的代码封装成一个有一个函数

    3)最后完成的代码,就顺序地调用不同的函数

       b.特点

    1)注重步骤与过程,不注重职责分工

       2)需求复杂,代码会变得很复杂

    3)开发复杂项目,没有固定的套路,开发难度很大

  4.面向对象

   相比较函数,面向对象是更大的封装,根据职责在一个对象中封装多个方法

   a.谁来做

    1)在完成某一个需求前,首先确定职责一一要做的事情(方法)

    2)根据 职责 确定不同的对象,在对象内部封装不同的方法(多个)

    3)最后完成的代码,就顺序地让不同的对象调用不同的方法

   b.特点

    1)注重对象和职责,不同的对象承担不同的职责

    2)更加适合应对复杂的需求变化,是专门应对复杂项目开发,提供的固定套路

    3)需要在面向过程基础上,再学习一些面向对象的语法

  5.类和对象的概念

   类和对象是面向对象编程的两个核心概念

   类

      a.类是对一群具有相同特征或者行为的事物的一个统称,是抽象的,不能直接使用

       特征被称为属性

       行为被称为方法

    b.类就相当于制造飞机时的图纸,是一个模板,是负责创建对象的

   对象

    a.对象是由类创建出来的一个具体存在,可以直接使用

    b.由哪一个类创建出来的对象 ,就拥有在哪一个类中定义的: 属性 方法

    c.对象就是相当于用图纸制造的飞机

    在程序开发中,应该先有类,再有对象

   6.类和对象的关系

    a.类是模板,对象是根据类这个模板创建出来的应该先有类,再有对象

    b.类只有一个,而对象可以有很多个

      不同的对象之间属性可能会各不相同

    c.类中定义了什么属性和方法,对象中就有什么属性和方法,不可能多,也不可能少

  7.类的设计

   在程序开发中,要设计一个类,通常需要满足三个要素:

     1.类名这类事物的名字,满足大驼峰命名法

     2.属性这类事物具有什么样的特征

     3.方法这类事物具有什么样的行为

    大驼峰命名法

      1.每一个单词的首字母大写

      2.单词与单词之间没有下划线

   8.类名的确定

    a.名词提炼法,分析整个业务流程

    b.出现的名词,通常就是找到的类

  9.属性和方法的确定

    a.对对象的特征描述,通常可以定义成属性

    b.对象具有的行为(动词),通常可以定义成方法

七、面向对象基础语法

  1.dir内置函数

   a.在Python中,对象几乎时无所不在的,我们之前学习的变量、数据、函数都是对象

   b.在Python中可以使用两个方法验证:

    1)在标识符/数据后输入一个  . ,PyCharm会提示该对象能够调用的方法列表

    2)使用内置函数dir传入标识符/数据,可以查看对象内的所有属性方法

   注释:__方法名__格式的方法是Python提供的内置方法/属性

    

   2.定义简单的类(只包含方法)

   1)面向对象更大的封装,在一个类中封装多个方法,这样通过这个类创建出来的对象,就可以直接调用这些方法了!

   2)语法格式:

    

    方法的定义格式和函数几乎一样,区别在于第一个参数必须是self

    类名的命名规则要符合大驼峰命名法

    3)创建对象

    当一个类定义完成后,要使用这个类来创建对象,语法格式:

    

八、引用概念的强调

  

  面向对象开发中引用的概念是同样适用的

    1.在Python中使用类创建对象之后tom变量中仍然记录的是对象在内存中的地址

    2.也就是tom变量引用了新建的猫对象
    3.使用print输出对象变量默认情况下,是能够输出这个变量引用的对象由哪一个类创建的对象,以及在内存中的地址(十六进制表示)

  注释:在计算机中,通常都是使用十六进制表示内存地址

九、给对象增加属性

   1.在Python中要给对象设置属性,非常的容易,但是不推荐使用。因为:对象属性的封装应该封装在类的内部

   2.只需要在类的外部的代码中直接通过,设置一个属性即可

    注意:这种方式虽然简单但是不推荐使用!

     3.使用self在方法内部输出每一只猫的名字

    1)由哪一个对象调用的方法,方法内的self就是哪一个对象的引用

    2)在类封装的方法内部,self就表示当前调用方法的对象自己调用方法时程序员不需要传递self参数

    3)在方法内部
      可以通过self访问对象的属性
      也可以通过self调用其他的对象方法改造

       

十、初始化方法

   1.在类的外部给对象增加属性

    先调用方法再设置属性,程序会报错

   

     

    2.初始化方法

    

    3.在初始化方法内部定义属性

     

    4.改造初始化方法——初始化的同时设置初始值         

    

十一、 私有属性、单继承和方法重写

  1.私有属性和方法

   A.在实际开发中,对象的某些属性或方法可能只希望在对象的内部被使用,而不希望在外部被访问到

     私有属性就是对象不希望公开的属性

     私有方法就是对象不希望公开的方法

   B.定义方式

    在定义属性或方法时,在属性名或者方法名前增加两个下划线,定义的就是私有属性或方法

   2.伪私有属性和私方法

   A.Python 中,并没有真正意义的私有

   B.在给属性、方法命名时,实际是对名称做了一些特殊处理,使得外界无法访问处理方式: 在名称前面加上 __类名 __类名__名称

   注释:在日常开发中,不要使用这种方式,访问对象的私有属性或私有方法

十二、面向对象三大特性

  1.封装根据职责将属性和方法封装到一个抽象的

  2.继承实现代码的重用,相同的代码不需要重复的编写

  3.多态不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度

十三、单继承

  1.继承的概念:

    子类拥有父类的所有方法和属性

  2.继承语法

    

       子类继承自父类,可以直接享受父类中已经封装好的方法,不需要再次开发

      子类中应该根据职责,封装子类特有的属性和方法

  3.继承的传递性

    C 类从B类继承,B类又从A 类继承,那么C类就具有B类和A类的所有属性和方法

       子类拥有父类以及父类的父类中封装的所有属性和方法

十四、方法的重写

  1.子类拥有父类的所有方法和属性

  2.子类继承自父类,可以直接享受父类中已经封装好的方法,不需要再次开发

  3.当父类的方法实现不能满足子类需求时,可以对方法进行重写(override)

  4.重写父类方法有两种情况:

   a.覆盖父类的方法

   b.对父类方法进行 扩展

  5.覆盖父类的方法

   a.如果在开发中,父类的方法实现和子类的方法实现 完全不同

   b.就可以使用 覆盖 的方式,在子类中 重新编写 父类的方法实现

   c.具体的实现方式,就相当于在子类中定义了一个和父类相同名的方法并且实现

   d.重写之后,在运行时,只会调用子类中重写的方法,而不再会调用父类封装的方法

   6.对父类方法进行扩展

   

   7.调用父类的另一种方式

    

   这种方式,目前在 python 3.x 还支持这种方式

   这种方法不推荐使用,因为 一旦 父类发生变化,方法调用位置的 类名 同样需要修改

注释:在开发时,父类名 和 super( ) 两种方式不要混用,如果使用当前子类名调用方法,会形成递归调用,出现死循环

    

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

    

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2021-03-28 18:51  未成仙小魔女  阅读(88)  评论(0)    收藏  举报