Python编程技巧 – 对象和类

Python Programming Skills – Object and Class

本文简要介绍用Python如何实现面向对象,对象和类的声明及使用,以及面向对象的特征,及其如何使用属性和方法的介绍;并且,继承将是重用类和对象的不错选择。

0. 面向对象

在接触面向对象编程之前,人们在生活中几乎无处不在地和对象接触;只不过,人们心中并不知道什么是对象,没有将自然界的物体和对象关联起来。

1) 自然界的对象

对象就是可以被感知、触摸的实体。在自然界里,首先看到的就是田野,山川,河流,房屋,人们等,这些都是原始对象。

每个IT人员用的电脑、配件,每个家庭的房间及家具,每个社区的体育设施,以及每条道路的标志、围栏和交通灯等等,也都是对象。

2) 软件开发的对象

编程或者软件开发过程中的对象定义没有实质的差异;尽管软件的对象不可触摸,但在程序流程和逻辑方面,却实在在地担任着重要角色。

这些对象,往往跟数据打交道,它们是数据与相关行为的集合。

3) 面向对象

Python作为编程语言,它在被开发的初期,就已经被设计有对象的特征,因此,它可以用面向对象的编程方法来解决很多实际问题。

所谓 面向 就是指向的意思,因此,面向对象其实就是功能性地指向对象,即通过数据和行为,来描述一系列相互作用的对象。

经历了面向对象的分析、设计和编程,也就对其流程有了闭环的操作。这就是面向对象程序设计的过程。

1. 对象和类

既然对象是数据和行为的集合,那么,如何定义和区分不同对象的类型呢?

人们用肉眼一秒钟就能分辨出苹果(Apple)和橘子(Orange)的区别,是因为他们的外形(shape),颜色(color)都不同。因此,除了这两个对象的名称不一样,它们的自身属性也不一样;此外,还有气味(smell)和味道(taste)的属性也不一样。

所以,定义这两个对象到编程语言,最初就有了基本概念,可以以名称(对象名)和特征(属性)来区分。

仔细想想,前面提到苹果和橘子是一个大的门类。具体到哪个苹果,或者哪个橘子,它们又会有着细节的差异,这就引入了类和对象的概念。

苹果这一大类Apple,就是一个编程所用的类(class), 而具体的哪个苹果,例如:这个苹果(theApple)就是一个对象,因为它从一个种类具体化到一个物体了;同时,这个实际的对象theApple也具有自己的属性。

由此可以引申出,类其实是对象的蓝本(blueprint), 而对象则是一个个具体的实例一个类可以有很多个对象

2. Python对象

1) 创建Python类

类似Apple的例子,苹果可以被定义为一个类,在Python语言里,可能编写的最简单的类的代码如下:

class Apple:
	pass

类的定义,以class关键字开始,接着是类的名称(由用户自己命名),最后以冒号结束这个语句;类里面的代码可能有很多种,但还不确定,因此,用pass代替。

Python的代码块不用大括号{ }分隔,因此在下一句必须缩进到合适的位置(实际编程语句开头可以有2个或者4个空格,这都能被解释器接受)

2) 类的实例化

既然创建了类,那么如何变成具体的对象呢?这需要类的实例化;也就是将类具体到一个实际的对象;创建类的实例,需要在类名称后加一对括号( )来进行,这就说明产生了一个新的实例,也就是一个新的对象。

Apple()

类的实例输出,也就等同于对象的输出;这需要将实例赋给一个变量A,从而打印输出,

A = Apple()
print(A)

由于苹果有天生的特性(即属性),因此,我们将属性添加到类,再打印输出属性,看有什么效果。代码如下:

class Apple:
    color = 'red'    
    smell = 'well'
    taste = 'sweet'
print("Type of Apple is", Apple)
print("The Apple smells", Apple().smell)
print("And the Apple tastes", Apple().taste)

运行结果如下图:
Python编程技巧 – 对象和类-LMLPHP
运行成功!

以上代码块中,print函数打印输出Apple对象的类别class; 之后依次输出该对象实例的smell, taste(Apple类中定义的)属性值。

3. 添加属性

当我们创建了一个基本类后,但是没有什么实际用途;它看起来既没有任何数据,也不能做什么事,这时候就需要给它添加属性。

添加属性的方法,是通过点标记法,在对象(类的实例)后面设定属性。

如下示例,创建一个点坐标类(Point),然后给它添加属性,即坐标x, 坐标y.

class Point:
    pass
p1 = Point()
p2 = Point()

p1.x = 5
p1.y = 4

p2.x = 3
p2.y = 6

print(p1.x, p1.y)
print(p2.x, p2.y)

执行结果如下图所示:
Python编程技巧 – 对象和类-LMLPHP
以上代码创建了空的Point类,没有数据和行为;然后创建了两个实例p1, p2, 并给它们赋值x, y, 即确定其二维坐标中的点的定位。

其中,p1.x, p1.y, p2.x, p2.y都采用了点标记法,就是用对象(也就是实例)加点再加属性来标记,将特定的值赋给它们,使得这些属性值具有实际意义。

当然,这些被赋予的值,可以是Python的基本类型、内置数据类型或者其它的对象,甚至可以是一个函数或另一个类。它的用途很广泛。

4. 添加方法

如同下面的例子,类Student要定义学生类,然后用def关键字添加它的方法(函数),就是studyCourse,用来表示学习课程;要传递一个参数c作为具体课程给该方法(或者函数),传递的方法是用input函数输入字符串。

示例代码如下:

class Student:
   def studyCourse(c):
       c = input("Enter the course: ")
       return f"Hi, student! You are studying {c}."
   
student1 = Student()
print(student1.studyCourse())

等类和方法完成后,创建一个Student类的实例,就是student1, 最后用student1这个实例,使用点标记法调用studyCourse()方法,完成这次输入输出课程的任务。

执行结果如下图所示:
Python编程技巧 – 对象和类-LMLPHP

5. 继承

类创建完毕后,可以生成无限个对象实例,只要用户愿意。

但是,如果有新的特性产生,需要创建类似的对象实例,又不想重新开始,该怎么办呢?- 创建该类的子类,来继承它,是一种不错的选择。

例如,通过Student类创建小学生类Pupil,此时,Pupil类继承了Student类。

class Student:   
   def studyCourse(n):
       c = input("Enter the course: ")
       return f"Hi, student! You are studying {c}."

class Pupil(Student):
    pass

student1 = Student()
print(student1.studyCourse())

pupil1 = Pupil()
print(pupil1.studyCourse())

执行结果如下图所示:
Python编程技巧 – 对象和类-LMLPHP
从上面的例子不难看出,Pupil继承其父类Student,只需要在参数括号里添加父类的名称即可,即便类代码块没有任何内容,只有一行pass; 它也可以通过Pupil的对象实例,来调用所继承Student的类的对象的方法studyCourse(), 打印输出课程。

看起来轻而易举!

6. 小结

以上对Python类和对象的产生做了初步介绍,并展示了添加属性、方法的实例;最后,告诉大家,Python类还能够继承,从而发挥其父类的功能,去使用而不必重写相应的方法。

关于Python,还有相当多的话题,这里暂时告一段落。

技术好文不断推出,敬请关注。

喜欢就点赞哈。😊

相关阅读:

  1. Python编程技巧 - 转换二进制、十六机制和八进制的函数
  2. Python编程技巧 - 函数入门
  3. 安装最新版Visual Studio Code来开发Python应用程序
  4. 2023最新版Python 3.12.0安装使用指南
  5. Python编程技巧 - 使用列表(List)
11-18 18:28