Python编程技巧 – 对象和类
Python Programming Skills – Object and Class
Python是一种面向对象的高级程序语言。
本文简要介绍用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)
运行结果如下图:
运行成功!
尽管该类也定义了color这个颜色属性而并没有引用,但是这并不妨碍这个类具有了鲜明的面向对象的特征。
以上代码块中,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)
执行结果如下图所示:
以上代码创建了空的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()方法,完成这次输入输出课程的任务。
执行结果如下图所示:
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())
执行结果如下图所示:
从上面的例子不难看出,Pupil继承其父类Student,只需要在参数括号里添加父类的名称即可,即便类代码块没有任何内容,只有一行pass; 它也可以通过Pupil的对象实例,来调用所继承Student的类的对象的方法studyCourse(), 打印输出课程。
看起来轻而易举!
6. 小结
以上对Python类和对象的产生做了初步介绍,并展示了添加属性、方法的实例;最后,告诉大家,Python类还能够继承,从而发挥其父类的功能,去使用而不必重写相应的方法。
关于Python,还有相当多的话题,这里暂时告一段落。
技术好文不断推出,敬请关注。
喜欢就点赞哈。😊
相关阅读:
- Python编程技巧 - 转换二进制、十六机制和八进制的函数
- Python编程技巧 - 函数入门
- 安装最新版Visual Studio Code来开发Python应用程序
- 2023最新版Python 3.12.0安装使用指南
- Python编程技巧 - 使用列表(List)