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

一.封装

1.在介绍封装前我们先来了解下类的组成,下图可以看出,类中有特有的类属性,实例方法

  类方法(@classmethod),静态方法(@staticmethod)。外部调用时有两种方式可用

 (1)实例化一个对象,用对象.的方式去调用

 (2)直接用类名.的方式去调用,涉及到self时,需传个实例化对象进去

2.接下来我们再来介绍下封装,封装就是把不想让外界知道属性或者方法封装到类中,外部

 调用的时候不用去管调用方法的类别结构,这样提高了代码的安全性。从以上两种图中我们

 可以看出方法/属性都可在外部调用,那么如果我们不想方法或者属性在外部调用,只要在内

 部调用呢,那么接着往下看。

3. 我们把sex类属性和nameAge实例方法前加两个_,然后再外部调用时可以看到程序是报错的

 ,提示父类中并没有__sex。那么我们再在类中去定义一个name的方法,再方法内去调用nam

 eAge方法,可以看到能够正常运行,那么说明__为开头的方法和属性只能再类类别调用,那么

如果我们非要再外部调用呢,有没有其它办法呢,我们接着往下看。

4.python中有个方法叫做dir(),用法dir(类名),可以查询出当前类中有多少可以使用的属性和方法,

下图我们可以看见除了cla原本的属性和方法,还有其它的一些,这是因为再我们定义一个类是它

 就默认继承object类,所以查询出来的可用方法和属性是object+类本身的,回归正文,可看到

 ‘_cla__nameAge’和’_cla__sex’两个属性,我们先尝试调用看看就可以看出能不能调用成功。

二.继承(提高代码的复用性)

1.举个事例

  小明的爷爷长鼻尖大眼睛。小明的爸爸也是长鼻尖大眼睛,同时又是大耳朵。小明的妈妈圆脸

  长睫毛,而小明呢则长得更帅(长鼻尖大眼睛大耳朵,圆脸长睫毛)

2.继承有三种关系

   单继承:小明的爸爸和小明的爷爷就属于单继承关系

   多继承:小明同时继承了爸爸妈妈的大耳朵,圆脸长睫毛,属于多继承

  多重继承:小明的长鼻尖大眼睛和爸爸爷爷就是要多重继承关系

3.下面我们看下实例

   在子类中调用父类方法可使用super()去调用,也可使用父类名.的方式去调用父类中的方法,

   这点我们下章在讲两者的区别

  我们先实例化extend_father去运行看下结果,下图结果中可以看下子类extenf_father可继承父

  类extend_grandFather中的方法

 

 我们再来实例化xm类,看下运行结果,xm分别继承了extend_father、extend_grandFather、

 mom类中的方法。

 4.针对特殊(以__开头的)的方法和属于是不可以继承的,单也可通过上述讲的dir()方法查询可使用

    的属性,也可直接调用,如下图

5.上述介绍的都是单个.py文件中的类继承,那么多个.py文件直接的继承如何操作呢,接着往下看

   (1)两种模块的导入

            1.import    模块路径(后也可加个as 起个别名)

            2.from   模块路径   import  模块下的方法名

我们先来看下第一种

 再来看看第二种,可以看出,两种效果相同,这里需要注意一点,因为我们两个.py文件在同一目

 录下,所以导入的时候直接是模块的名称,如果不在目录下,需加下路径

6.方法重新

子类继承父类,可以调用父类的方法,那么如果父类的方法不满足子类的需要,子类就可以重写父

类的这个方法

 三.多态

1.说多个也是一同雾水,简单理解不同对象调用同一个方法可以实现不同的效果

2.多态的两个重要步骤

  (1)继承

  (2)方法重新

3.简单举例

 父亲有大耳朵,和三个孩子,但是三个孩子都不行要爸爸的大耳朵,感觉太丑,于是就在娘胎里

 把爸爸的大耳朵方法给重新掉了(仅限于代码逻辑)

 

 然后再实例化各个子类,虽调用的是同一个方法,但结果却不同

 

Tags: