python基础教程(七)面向对象程序设计思想

 

一、面向对象

1.面向对象的编程思想主要是针对大型软件设计而来的。

2.面向对象编程使得程序的扩展性更强。可读性更好

3.面向对象编程将数据和操作数据相关的方法封装到对象中,组织代码和数据方式更加接近人的思维,从而大大提高了编程的效率。

二、类 属性 方法

(一)类的定义

1.类是模板,系统根据类定义造出的对象。

2.类的内容:属性 方法

3.语法 class类名:

           类体

(1)类名命名规则一般规定首字母大写,驼峰原则

(2)类体中定义属性方法

(3)属性用来描述数据,方法(函数)用来描述数据相关操作

(二)构造方法__init__()与__new__()

1. 初始化对象需要定义构造__init__()方法.构造方法用于给对象初始化

2. 要点

(1)名称固定__init__()

(2)第一个参数是固定的必须为self。Self指刚刚创建的对象

(3)构造函数通常用来初始化实例对象的实例属性

(4)通过类名(参数列表)调用,调用后将创建好的对象赋值返回给相应的变量

(5)__init__方法用于初始化创建好的对象

(6)__new__()方法用于创建对象,一般无需重定义该方法

(7)如果不定义__init__()方法系统会自动创建__init__()方法,定义了该方法系统不会创建默认的方法

(一)实例属性与实例方法

1. 实例属性:从属于实例对象的属性,也成为“实例变量”

(1)实例属性一般在__init__()方法中通过以下代码定义:self.实例属性名=初始值

(2)在本类的其他实例方法中,也是通过self进行访问 ;self.实例属性名

(3)创建对象后,通过实例对象访问

     Obj01=类名() #创建初始化对象,调用__init__()初始化属性

     Obj01.实例属性名 = 值  #可以给自己属性赋值,也可以添加新的属性

2. 实例方法:实例对象的方法

(1)定义 def 方法名(self[形参列表]):

              函数体

(2)定义实例方法第一个参数必须是self

(3)调用实例方法时不需要给self传参

(4)方法与函数区别

  【1】 都是用来完成一个功能的语句块,本质一样

【2】方法调用时通过对象来调研,方法属于特定的实例对象

【3】直观上看,方法定义时需要传递self函数不需要

(5)dir(obj)获取所有的属性方法

(6)__dict__ 返回属性

(7)isinstance(对象,类型)判断对象是不是指定类型

(8)pass空语句

(二)类对象 类属性 类方法

1. 类对象 :定义类时生成类对象

2. 类属性 :从属于类对象的属性,也称为类变量,可以被所有类对象共享

(1)定义 class 类名 :

                类变量名 = 初始值

(2)在类或者类的外面通过类名来读写

3. 类方法:从属于“类对象”的方法。类方法通过装饰器@classmethod

定义   @classmethod

          def 类方法名(cls[参数列表])

             方法体

(1)@classmethod必须位于方法上面一行

(2)第一个cls必须有,cls值“类对象”本身

(3)调用类方法格式:类名:类方法名(参数列表)。参数列表不需要也不能给cls传值

(4)类方法中访问实例属性和实例方法会导致错误。

(5)子类继承父类方法时,传入cls是子类对象,而非父类对象

4. 静态方法:python中允许定义与“类对象”无关的方法成为静态方法

“静态方法”和在模块中定义普通函数没有区别,只不过“静态方法”放到了“类的名字空间里面”,需要通过“类调用”

(1)静态方法通过装饰器@staticmethod来定义  

     @staticmethod

  def 静态方法名([形参列表])

    方法体

(2)@staticmethod必须位于方法上面一行

(3)调用静态方法格式:类名.静态方法名(参数列表)

(4)静态方法中访问实例属性,和实例方法会导致错误

(三)del析构方法 垃圾回收机制

1. 垃圾:一个对象没有被引用时(引用计数为0时),就会被当成垃圾,调用__del__()方法

2. __del_方法又称析构方法,同于实现对象被销毁时所需的操作

3. 也可以通过del语句删除对象,确保调用__del__方法

4. 系统自定义该方法,不需要自定义析构方法

(四)__cell__方法和可调用对象

1. python中,凡是可以将()直接应用到自身并执行,都称为可调用对象

2. 可调用对象包括自定义函数,内置函数,实例对象

3. 定义了__celll__()方法的对象称为可调用对象,即该对象可以向函数一样被调用

4. 该方法使得实例对象可以像调用普通函数那样以“对象名()”的形式调用

 

(五)方没有重载方法动态性

1. python中的方法没有重载,在类体中定义多个重名的方法只有最后一个有效

2. Python是动态语言。可以动态添加新的方法,动态修改已有方法

(八)私有属性 私有方法

1. 私有约定

(1)两个下划线开头的属性是私有的,其他的为公共的

(2)类内可以访问私有属性(方法)

(3)类外部不能直接访问私有属性(方法)

(4)类外部可以通过_类名__私有属性(方法名)访问私有属性(方法)

 

(九)@property装饰器

 

1.@property装饰器将一个方法的调用方式变为属性调用

2.@property装饰器主要处理属性的读操作写操作

 

 

 

 

 

(十)属性方法命名总结

1.属性方法命名

(1)_xxx:保护成员不能用from module import*导入,只有 类对象和子对象能访问这些元素

(2)__xxx__系统定义的特殊成员

(3)__xxx:累的私有成员,只有类对象自己访问,外部可通过对象名._类名__访问

2.类编码风格

(1)类名首字母大写,多个单词驼峰原则

(2)实例名模块名小写多个单词用下划线分开

(3)每个类应紧跟文档字符串说明类的作用

(4)可以用空行组织代码,类中使用一个空行隔开方法,模块中使用两个空行隔开类了

(十一)none对象

1.none是一个特殊常量,表示变量没有指向任何对象

2.在python中none本身也是对象,有自己的类型Nonetype

3.可以将None赋值给任何变量,但不能创建nonetype类型的对象

4.if语句判断时空列表。空字典、空元组 0 等都转成FALSE

5 is ==判断时 空列表 空字典 空字符 0 None不会传成False

 

三、面向对象三大特征(封装 继承 多态)

(一)封装 (隐藏)

隐藏对象的属性和实现细节,只对外提供必要的方法,相当于将细节封装起来,值对外暴露相关的调用方法。通过私有属性私有方法封装

(一) 继承

继承可以让子类具有父类的特性,提高代码的重用性,从设计上是一种增量进化,原有父类设计不变的情况下,可以增加新功能,或者改进新算法

2. 如果一个新类继承自己设计好的类,就具有了已有类的特征。已有的类称为父类或者基类,新的类称为子类或者派生类

3. Python支持多重继承,一个子类可以继承多个父类

4. 继承语法:class子类类名 (父类1[,父类名2,....]):

                类体

5. 如果类定义没有指定父类默认父类是object类

6. 关于构造函数:

(1)子类不重写__init__实例化子类时,会自动调用父类定义的__init__

(2)子类重写了__init__时,实例化子类就不会调用父类已经定义的__init__

(3)如果重写了__init__时,要继承父类的构造方法,可以使用super关键字,也可以使用 父类名.__init__(self,参数列表)调用

7. 成员继承;子类继承了父类除了构造之外的所有的属性和方法

8. 方法重写:子类可以重新定义父类的方法,就会覆盖父类方法称为重写、

9. 通过mro()方法或者__mro__可以输出这个类的继承层次结构

10. 多重继承:一个子类111可以有多个父类,这样就具备了多个父类的特点

11. Super()获得父类的定义:如果想调用父类的方法时,可以通过super()来做

  Super()代表父类的定义不是父类的对象;调用父类构造方法:super(子类名称.self).__init__(参数列表)

12.Object根类:oobject是所有类的父类,因此所有的类都有boject的属性方法

方法本质也是属性

13.重写str方法

(1)__str__方法,用于返回一个对对象的描述。将对象转成对字符串描述(内置函数str()就是调用该方法)

(2)经常用于print()方法查看信息

14.MRO方法解析顺序

(1).python支持多继承,如果父类中有相同的名字方法,在没有指定父类名字时按从左王右顺序搜索

(2).MRO:方法解析顺序。我们可以通过mro()分析法获得类的层次结构,方法解析顺序也是按这个“类的层次结构”寻找的。

(二) 多态

1.多态是指同一方法调用,由于对象不同会产生不同的行为。

(1)多态是方法的多态,属性没有多态

(2)多态必要条件 继承 重写

四.特殊方法 特殊属性

运算符是通过对象的特殊方法实现的

 

 

 

 

 

 

五、 对象的浅拷贝深拷贝

1. 浅拷贝不拷贝对象的子对象,python的拷贝一般是前拷贝

2. 深拷贝通过depcopy函数递归拷贝子对象的子对象

六 、组合

1. 除了继承组合也能实现代码的重用。核心是将父类对象作为子类的属性

 

   组合继成如何选择

(1)是什么关系  is-a    继成

(2)有什么关系  has-a    组合

七、设计模式

设计模式:对某一类问题固定做法

(一)工厂模式

1. 工厂模式实现了创建者和调用者分离,使用专门的工厂类将选择实现类、创建对象进行同一管理的和控制

(二)单例模式

单利模式的核心作用是确保一个类只有一个实例,并且提供一个访问该实例的全局访问点

 

你可能感兴趣的:(python基础教程,python)