码迷,mamicode.com
首页 > 编程语言 > 详细

python中的类和对象

时间:2020-05-21 13:12:48      阅读:56      评论:0      收藏:0      [点我收藏+]

标签:软件   成员   对象   eth   接下来   工程师   完美   获取   特殊用法   

  我们常说人以群分,物以类聚,即根据特征去划分,这其实就是类的思想。在编写类时,我们会定义一大类对象都有的通用行为。基于类创建对象时,每个对象都自动具备这种通用行为,然后可以根据需要赋予每个对象独特的个性。下面我们就来具体了解一下什么是类和对象。

1、类与对象的语法规范

关键字:class

语法如下:

技术图片

 规范:

  • 类名的命名规范:大驼峰命名,即每个单词的首字母大写
  • 类名需要做到见名知意,提高代码的可读性

2、编写第一个类

  我们在动画片中都看到过超人,回想一下超人的特征:高大、英俊、潇洒、有超能力、能上天入地、保护人民,保护地球、惩治罪犯......我们可以把具有这类特征的人,都归纳到超人类,然后把这些特征转换成python里面的类。

 技术图片

 上述就是我们写的超人类,只要是属于这个类的人都具有这些特征,都有这些特殊的技能。

3、类当中的属性

类当中的属性包括类属性和实例属性:

  • 类属性:这个类的特征、这个群体的特征,别的类(别的群体)可能不具备,类属性可以被类和实例获取;
  • 实例属性:这个个体的特征,类当中的其他成员可能不具备,实例属性只能被实例获取。

1)类属性

在学习属性的调用之前,我们先来学习创建实例,创建实例我们有时候也叫创建对象,其语法如下:

技术图片

 根据前面我们定义的超人类,我们创建一个实例如下:

技术图片

 我们通过这个实例去调用我们在前面超人类当中定义的类属性:

技术图片

 那么,类属性能不能通过类去调用呢,当然是可以的呀,因为类属性本身就是这个类具备的属性,当然能够通过类去调用了:

技术图片

在上面,我们调用的类属性都是在类里面定义的,即先天具有的,其实,类属性也可以在后天进行定义,示范代码如下:

技术图片

 2)实例属性

在前面我们介绍了实例属性的概念,了解到实例属性只能被实例调用,不能被类进行调用,下面我们将通过一些具体的代码为大家详细的介绍实例属性。

实例属性的定义:

技术图片

 在上面的代码中,我们为person1 定义了两个实例属性,即 hobby 和 eye,那么如果我们现在通过 person2 去调用这两个实例属性是否可以呢,我们来写一段示范代码看一下:

技术图片

 运行这段代码,结果如下:

技术图片

 为什么会报错呢,我们不妨回忆一下实例属性的定义,实例属性是类中某一个个体的属性,其他个体不一定具备,而我们在前面定义的时候只是给 person1 定义了 hobby 和 eye 属性,person2并没有这些属性,调用时当然会报错了。

 

那么,我们再来思考一下,实例属性能不能通过类来进行调用呢,我们来看一下示范代码:

技术图片

 运行后的结果是:

技术图片

 其实,根据实例属性的定义我们已经清楚的预料到了代码会报错了,实例属性只是某一个个体具备的属性,类不一定具备,那么通过类去调用当然会报错了。

 4、类当中的方法

 类当中的方法表示类、对象的行为,方法的本质是函数,只是将函数放在了类当中,我们将放在类里面的函数称之为方法。类当中的方法主要包括:类方法、实例方法、静态方法三种,下面我们将通过一段示范代码为大家讲解这三种方法的区别以及相互调用。

  • 实例方法:实例方法的第一个参数规定是 self,用来表示这个实例本身,实例方法只能被实例调用,不能被类调用;
  • 类方法:在实例方法的基础上,类方法需要在方法前添加@classmethod,表示这是一个类方法,同时需要将 self 改为 cls,用来表示这个类本身。类方法可以被类和实例调用;
  • 静态方法:静态方法是为了方便管理放在类里面的普通函数,静态方法需要在方法上面加上 @staticmethod,表示这是一个静态方法,静态方法不需要使用self、cls作为默认参数,静态函数可以被类、实例调用。

示范代码如下:

技术图片

下面我们再写一个例子,来说明三种方法的调用,示范代码如下:

 技术图片

 在类定义的过程中,我们常常会遇到方法之间调用的情况,现在我们通过一段示范代码来说明类定义过程中方法的互相定义,示范代码如下:

 技术图片

 最后,我们补充一下实例方法之间的互相调用,示范代码如下:

技术图片

 5、类的初始化函数__init__()

我们改写前面定义的超人类,引入初始化函数:

技术图片

 引入初始化函数后,我们在创建实例的时候需要传入对应的参数,示范代码如下:

技术图片

 需要我们注意的是,如果在类里面使用了__init__()函数,那么在创建实例的时候传入的参数一定要与__init__中的参数保持一致,而且,在__init__()函数中,必须将传入的参数设置成实例属性才能被访问到。

5、类的继承

学习了类之后,我们能够很好的将代码和数据分离开来,有了基本的封装思想。接下来我们将进一步学习类的继承,让我们对类嗯对使用更加灵活。

1)类继承的简单用法

我们首先来了解最传统的类的继承,即子类直接继承父类所有的方法和属性,不做任何改动,比如我们现在定义一个父类软件测试工程师类:SoftwareTestEnginner,具体的代码如下所示:

技术图片

 我们现在创建父类的实例并进行调用:

技术图片

 运行的结果如下:

技术图片

 现在我们写一个子类去继承父类的方法和属性,我们将这个类命名为中级测试工程师,示范代码如下:

技术图片

 创建子类的实例并调用父类的方法:

技术图片

 运行代码后的结果如下:

技术图片

 这就是最简单的类的继承的方法,子类不需要做任何事情,就可以调用父类的所有属性和方法。

2)类继承的重写和扩展

  我们可以编写一个类什么都不做,直接继承父类的所有属性和方法,且能够直接调用父类的所有属性和方法,但是这显然不能满足我们的需求,所以我们还要进一步去学习类的其他特性,即重写和扩展,我们先来了解一下类继承的重写。

(1)重写

  重写是对继承过来的父类的方法去进行重写,因为有些方法继承过来后,功能可能不符合我们的需求,这时我们就要去进行重写,比如说我们在中级测试工程师类中来改写basic_skill函数,示范代码如下所示:

 技术图片

 我们创建实例来进行调用:

技术图片

 运行后的结果如下图所示:

技术图片

 通过上述代码,我们可以得到下面两个总结点:

  • 重写basic_skill 后,子类调用的是重写后的basic_skill函数;
  • 没有重写的salary函数,子类可以正常调用。

(2)扩展

  重写只是针对从父类继承过来的方法进行修改,但是实际上,任何类都会有自己的新特性。我们依然使用上面的例子来进行说明,对于中级测试工程师来说,我们除了要具备初级测试工程师基本的点点点,中级测试工程师还需要具备一些其他父类不具备的功能,我们编写示范代码如下所示:

技术图片

  我们创建实例来进行调用:

技术图片

 运行代码后,结果如下图所示:

技术图片

 通过上述代码,我们可以得到如下结论:

  • 子类可以直接调用父类中的属性值:self.name
  • 子类可以重写父类的方法:basic_skill()
  • 子类可以扩展一些父类没有的方法:auto_skill()

3)类的超继承

  类继承还有另外一个特殊用法,就是超继承。超继承其实也是类方法重写的另一种表现,他实现的功能要比简单的重写更多一些。用直白的语言来进行描述:超继承既要有父类的特性又要有子类的新特性,接下来我们仍然使用上面的例子来说明超继承的用法,示范代码如下:

技术图片

 创建实例并进行调用:

技术图片

 运行之后,结果如下图所示:

技术图片

 总结一下,超继承既可以有父类方法的特性,又可以有子类拓展的新特性,可以说是类方法重写与扩展的完美结合体。在超继承中,我们要注意 super 关键字的用法,如果父类的方法中有参数传入,在调用的时候也要传入对应的参数。

 

python中的类和对象

标签:软件   成员   对象   eth   接下来   工程师   完美   获取   特殊用法   

原文地址:https://www.cnblogs.com/Cactus-xiaot/p/12902933.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!